日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

leetcode56. 合并区间

發布時間:2023/12/4 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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. 合并区间的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。