注意点:
1.sort自带的比较函数是支持多维数组比较的,使用的是字典序比较;
2.对于多维的vector,可以使用back,front,at等函数
比较例子:
二维 vector 示例
vector<vector<int>> v = { {2,5}, {1,3}, {1,2} }; sort(v.begin(), v.end());比较过程(字典序)
比较
[2,5]与[1,3]
第一元素 2 > 1 →
[1,3] < [2,5]比较
[2,5]与[1,2]
第一元素 2 > 1 →
[1,2] < [2,5]比较
[1,3]与[1,2]
第一元素相等 1 == 1 → 比第二元素 3 > 2 →
[1,2] < [1,3]排序结果:
{ {1,2}, {1,3}, {2,5} }左端点升序排列,相同左端点按右端点升序,正好符合区间合并需求。
三维 vector 示例
vector<vector<vector<int>>> arr = { {{1,2},{3,4}}, {{1,2},{3,3}}, {{0,9}}, {{1,1},{2,2}} }; sort(arr.begin(), arr.end());比较过程(逐层字典序)
比较
{{1,2},{3,4}}与{{1,2},{3,3}}
第一行
[1,2] == [1,2]→ 比第二行[3,4] > [3,3]→ 后者更小比较
{{0,9}}与其它
第一行
[0,9]小于[1,2]→ 排最前比较
{{1,1},{2,2}}与{{1,2},{3,3}}
第一行
[1,1] < [1,2]→ 排在前排序结果:
{ {{0,9}}, {{1,1},{2,2}}, {{1,2},{3,3}}, {{1,2},{3,4}} }外层二维数组按字典序排列,内层数组也按字典序排列。
总结规律
二维 vector:先比每行第一个元素,不同立即决定顺序;相同则比第二个元素
三维 vector:先比第一层的第一行第一个元素 → 若相等比第一行第二个元素 → 若仍相等比下一行,依此类推
任意维度:逐层逐元素比较 → 遇到不同立即返回 → 相同继续比较下一位
class Solution { public: vector<vector<int>> merge(vector<vector<int>>& intervals) { sort(intervals.begin(),intervals.end()); vector<vector<int>> tmp; for(int i =0;i<intervals.size();i++){ int L=intervals[i][0]; int R=intervals[i][1]; if(!tmp.size() || L>tmp.back()[1]) tmp.push_back({L,R}); else tmp.back()[1]=tmp.back()[1]>R?tmp.back()[1]:R; } return tmp; } };