分析
Source Code
/** * Definition for an interval. * struct Interval { * int start; * int end; * }; */ class Solution { public: static bool mycmp(const Interval &a, const Interval &b){ return (a.start < b.start); } vector<Interval> merge(vector<Interval>& intervals) { if(intervals.size() == 0) return intervals; //step1 sort(intervals.begin(), intervals.end(), mycmp); //step2 vector<Interval> result; int start = intervals[0].start; int end = intervals[0].end; for(int i = 0; i < intervals.size(); ++i){ if(end >= intervals[i].start){ end = max(intervals[i].end, end); }else{ result.push_back(Interval(start, end)); start = intervals[i].start; end = intervals[i].end; } } result.push_back(Interval(start, end)); return result; } };
應用
LeetCode#56,#57 除了顯示我司高大上之外,有沒有實際應用呢?有的,例如在工業通訊中,上位機的不同功能區塊(Alarm, DataLogger, Display...)從網路讀取控制器暫存器時,這些暫存器的位址往往會發生重疊,以三菱 PLC 為例,資料暫存器通常命名為 Dn,n 為 10 進位數值代表暫存器編號:
- 節省頻寬
- 節省 request/response round-trip time
尤其對於串列通訊,9600bps 傳輸一個 byte 就要 1ms 左右(1/9600*10 = 1.04ms),不必要的通訊可能浪費數十 ms 到上百 ms,這對控制器與上位機來說是非常大的損失(想想這些時間 CPU 可以做多少事)。
由此可見,某些公司考這些題目並非吃飽沒事幹故意整人,而是在他們的實際工作中曾經碰上類似的困難 :)
沒有留言:
張貼留言