leetcode56. 合并区间
生活随笔
收集整理的這篇文章主要介紹了
leetcode56. 合并区间
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一:論語
這個做到感覺很難,因為摔的跟頭少,所以很多事情就是簡單的講究,速度,可想而知,結果都是不好的。
二:題目
三:上碼
// class Solution { // public:// static bool cmp(const vector<int>&v1, const vector<int>& v2) { // return v1[1] < v2[1]; // } // vector<vector<int>> merge(vector<vector<int>>& intervals) { // /** // 思路:1.本題類似于無重疊區間 // 2.我們先按區間數組的左邊界升序處理 // 3.然后判斷第一組元素的右邊界和第二組元素的左邊界進行比較,如果比起大的話那就合并,同時更新 // 右邊界。 // */ // vector<vector<int> >ans; // int flag = 0; // if(intervals.size() == 1) { // ans.push_back(intervals[0]); // }// sort(intervals.begin(),intervals.end(),cmp); // int end = intervals[0][1];//第一組元素的右邊界 // int start = intervals[0][0];//第一組元素的左邊界// if(intervals.size() > 1 && intervals[1][0] > intervals[0][1]) {//對第一組元素特殊處理 // ans.push_back(intervals[0]); // }// for(int i = 1; i < intervals.size(); i++) {// while(i < intervals.size() && end >= intervals[i][0]) {//大于其左邊界就合并 // end = intervals[i][1]; // start = min(start,intervals[i][0]); // i++; // flag = 1; // if(i == intervals.size()) ans.push_back({start,end}); // }// if(i < intervals.size() && flag == 1){ // ans.push_back({start,end}); // flag = 0; // }// if(i < intervals.size() && end < intervals[i][0]) { // ans.push_back(intervals[i]); // }// } // return ans; // } // };class Solution { public:static bool cmp(const vector<int>&v1, const vector<int>& v2) {return v1[0] < v2[0];}vector<vector<int>> merge(vector<vector<int>>& intervals) {/**思路:1.本題類似于無重疊區間2.我們先按區間數組的左邊界升序處理3.然后判斷第二組元素的左邊界和第一組元素的右邊界進行比較,如果比起大的話那就合并,同時更新右邊界。4.intervals[i-1][1] >= inteavals[i][0];那么就可以判斷是重疊了,因為我們是按數組的左邊界進行升序的,所以的 intervals[i][0] > intervals[i-1][0], 那么肯定是重疊了。 */vector<vector<int> >ans;int flag = 0;sort(intervals.begin(),intervals.end(),cmp);for(int i = 1; i < intervals.size(); i++) {int start = intervals[i-1][0];//這里的i-1,為我們的最后一組元素挖了個坑,如果最后一組元素沒有被合并的話int end = intervals[i-1][1]; //這里的i-1會將其隔過去。while(i < intervals.size() && intervals[i][0] <= end) {//前一個元素的右邊界大于當前元素的左邊界end = max(end,intervals[i][1]);//因為可能右邊界不是升序的if(i == intervals.size()-1) flag = 1;i++;}ans.push_back({start,end});}if(flag == 0) ans.push_back(intervals[intervals.size()-1]);return ans;} };
做了倆鐘頭,自己寫就是出不來,難產了,把他娘累死也生不出來,我自己用的按數組的右邊界 升序處理,我以為是和以前做的題類似,但其實不然,我們處理右邊界如果人家本來就是升序的,那么當其中有一組的范圍囊括所有的數組范圍的時候
我們就難產了,但是用左邊界就不會遇到這個問題。
什么樣的感情堅固,
從大學走到社會,
再走向婚姻嗎?
把平凡的事情做下去 ,
我們就是普通人
可我老覺得自己像個Superhero
哈哈哈 瞎說結束 晚安 加油陌生人。
總結
以上是生活随笔為你收集整理的leetcode56. 合并区间的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: leetcode435. 无重叠区间
- 下一篇: leetcode738. 单调递增的数字