IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 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
哈哈哈 瞎说结束 晚安 加油陌生人。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-02-16 13:22:22  更:2022-02-16 13:24:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 17:37:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码