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

合并区间链接
多维的vector也可以sort!力扣刷题-合并区间有感_第1张图片
多维的vector也可以sort!力扣刷题-合并区间有感_第2张图片
暴力法失败了,其实很好模拟,唯一的问题就是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。在这种情况下,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 函数能够有效地对二维向量进行排序,适用于许多需要对区间或其他多维数据进行排序的场景。

你可能感兴趣的:(本科学习,c语言,leetcode,算法,职场和发展,c++)