iT邦幫忙

2021 iThome 鐵人賽

DAY 7
0
自我挑戰組

來解數學跟刷圖論跟幾何程式題或者我突然想研究的主題系列 第 7

Leetcode: 630. Course Schedule III | 含C++筆記

  • 分享至 

  • xImage
  •  

思路:

我一開始看到這題,感覺他像可以用Greedy解法解的問題,然後又想他是III,所以他也可以用圖呈現?

感覺需要先將課程依照期限,由小排到大。

後來查找了一下,感覺他像Activity Network ( PERT Network )的問題。

所以這題的問題是:要怎麼用手中的現有資訊,組出一個合理的流程圖?

因為沒什麼思路,所以我就照Hint 1, Hint2做。

 
 
 

筆記:

想用2D vector的其中一個column進行排序的話,可以做一個custom sort。

    for (auto pair: courses) {
        cout << pair[0] << " " << pair[1] << ", ";
    }
    sort(courses.begin(), courses.end(), 
        [] (const vector<int> &coursea, const vector<int> &courseb)
        {
            return coursea[1] < courseb[1];
        });
    cout << endl;
    for (auto pair: courses) {
        cout << pair[0] << " " << pair[1] << ", ";
    }

 
 
 

程式碼:

class Solution {
public:
    int scheduleCourse(vector<vector<int>>& courses) {
        sort(courses.begin(), courses.end(), 
            [] (const vector<int> &coursea, const vector<int> &courseb)
             {
                 return coursea[1] < courseb[1];
             });

        int currentTotalTime = 0, count = 0;
        priority_queue<int> pq;
        
        for (auto pair: courses) {
            
            currentTotalTime += pair[0];
            pq.push(pair[0]);
            
            if (currentTotalTime <= pair[1])
                count++;
            else if((currentTotalTime > pair[1]) && !pq.empty()) {
                int curr_biggest = pq.top();
                currentTotalTime -= curr_biggest;
                pq.pop();    
            }
        }
        return count;
    }
};

 
 
 

後來

後來看Hint後有點回過味來,其實這題不需要安排流程圖,只是要在有限時間內塞越多工作越好,所以遇到飽和的情況,就把比較肥的東西丟走,這樣理論上就能容納更多小的東西。

所以最後我就用heap(priority quequ)儲存合理的工作內容,一但有超過的情況,就召喚最大值,把它刪了。
 
 
參考:
https://web.ntnu.edu.tw/~algo/DirectedAcyclicGraph.html
https://stackoverflow.com/questions/45494567/c-how-to-sort-the-rows-of-a-2d-vector-by-the-values-in-each-rows-column
https://leetcode.com/problems/course-schedule-iii/
https://yuihuang.com/cpp-stl-priority-queue/


上一篇
Leetcode: 80. Remove Duplicates from Sorted Array II
下一篇
Uva 10305. Ordering Tasks
系列文
來解數學跟刷圖論跟幾何程式題或者我突然想研究的主題33
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言