您的位置:首页 > 教育 > 锐评 > 多维的vector也可以sort!力扣刷题-合并区间有感

多维的vector也可以sort!力扣刷题-合并区间有感

2024/10/6 8:33:28 来源:https://blog.csdn.net/Winnie12138_/article/details/141370098  浏览:    关键词:多维的vector也可以sort!力扣刷题-合并区间有感

合并区间链接
在这里插入图片描述
在这里插入图片描述
暴力法失败了,其实很好模拟,唯一的问题就是interval很难有序,结果答案告诉我可以直接sort。。。
代码:

class Solution {
public:vector<vector<int>> merge(vector<vector<int>>& intervals) {// 如果输入的区间列表为空,直接返回空列表if (intervals.size() == 0) {return {};}// 首先将所有区间按照左边界进行排序,以便后续合并sort(intervals.begin(), intervals.end());// 用来存储合并后的区间列表vector<vector<int>> merged;// 遍历所有区间for (int i = 0; i < intervals.size(); ++i) {// 获取当前区间的左右边界int L = intervals[i][0], R = intervals[i][1];// 如果 merged 为空,或者当前区间无法与 merged 的最后一个区间重叠if (!merged.size() || merged.back()[1] < L) {// 将当前区间添加到 merged 中merged.push_back({L, R});}else {// 否则,当前区间与 merged 的最后一个区间重叠,更新最后一个区间的右边界merged.back()[1] = max(merged.back()[1], R);}}// 返回合并后的区间列表return merged;}
};

那到底sort(intervals.begin(), intervals.end());是什么意思呢?

  • sort(intervals.begin(), intervals.end()); 这行代码用于对 intervals 进行排序,其中 intervals 是一个二维数组(向量),即 vector<vector>。在这种情况下,sort 函数会根据默认的排序规则对 intervals 进行排序。对于二维数组来说,默认的排序规则是按照字典序进行排序,即首先比较第一列的元素,如果第一列的元素相等,则比较第二列的元素,以此类推。
具体排序规则:

第一列(左边界)排序:sort 函数首先会根据每个子数组(或区间)的第一个元素(即左边界)进行升序排序。也就是说,如果区间 a = [a1, a2] 和区间 b = [b1, b2],那么如果 a1 < b1,则区间 a 排在区间 b 之前。

第二列(右边界)排序:如果两个子数组的第一个元素相等,则比较它们的第二个元素(即右边界)。例如,如果 a1 == b1,则比较 a2 和 b2,如果 a2 < b2,则区间 a 排在区间 b 之前。

  • 示例说明:
    假设 intervals 为以下二维向量:
vector<vector<int>> intervals = {{1, 3}, {2, 6}, {8, 10}, {2, 4}, {7, 9}};

使用 sort(intervals.begin(), intervals.end()); 进行排序后,intervals 将会变成:


{{1, 3}, {2, 4}, {2, 6}, {7, 9}, {8, 10}}
排序过程:
  • 首先比较每个区间的第一个元素进行排序,因此 1 在最前面,然后是 2 开头的区间,依次类推。
  • 对于开头相同的区间 {{2, 6}, {2, 4}},因为 4 < 6,所以 {{2, 4}} 排在 {{2, 6}} 之前。
  • 这种字典序的排序方式使得 sort 函数能够有效地对二维向量进行排序,适用于许多需要对区间或其他多维数据进行排序的场景。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com