当前位置: 首页 > news >正文

多维的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 函数能够有效地对二维向量进行排序,适用于许多需要对区间或其他多维数据进行排序的场景。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Esxi 7.0 安装windows xp 问题汇总
  • 大模型面试问题记录
  • 2018年高教社杯全国大学生数学建模竞赛(ABCD题)题目及附件
  • 数据库分库分表的介绍
  • 浅谈如何克服编程学习中的挫折感
  • java版知识付费saas租户平台的核心功能设计:打造高效、个性化的学习体验
  • 在 Hub 上使用 Presidio 进行自动 PII 检测实验
  • 3154. 到达第 K 级台阶的方案数(24.8.20)
  • C++ | Leetcode C++题解之第343题整数拆分
  • 学分绩点预警系统设计与实现(源码+lw+部署文档+讲解等)
  • Java--SpringBoot工厂模式
  • R 语言学习教程,从入门到精通,R 数据重塑(15)
  • 设计模式在芯片验证中的应用——状态
  • VS Code开发C#(.NET)之快速入门
  • 大数据技术——实战项目:广告数仓(第八部分)FineBI实战
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • AHK 中 = 和 == 等比较运算符的用法
  • ES6之路之模块详解
  • gcc介绍及安装
  • input的行数自动增减
  • JavaScript 基础知识 - 入门篇(一)
  • Meteor的表单提交:Form
  • MobX
  • 回顾2016
  • 解析带emoji和链接的聊天系统消息
  • 开源地图数据可视化库——mapnik
  • 学习ES6 变量的解构赋值
  • 正则表达式小结
  • 阿里云ACE认证学习知识点梳理
  • # 飞书APP集成平台-数字化落地
  • # 利刃出鞘_Tomcat 核心原理解析(七)
  • #70结构体案例1(导师,学生,成绩)
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (Qt) 默认QtWidget应用包含什么?
  • (附源码)c#+winform实现远程开机(广域网可用)
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (十一)手动添加用户和文件的特殊权限
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (循环依赖问题)学习spring的第九天
  • (转)创业家杂志:UCWEB天使第一步
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .form文件_SSM框架文件上传篇
  • .net core docker部署教程和细节问题
  • .NetCore+vue3上传图片 Multipart body length limit 16384 exceeded.
  • .net开发引用程序集提示没有强名称的解决办法
  • .ui文件相关
  • @Transactional事务注解内含乾坤?
  • [<MySQL优化总结>]
  • [<事务专题>]
  • [100天算法】-目标和(day 79)
  • [2019.3.20]BZOJ4573 [Zjoi2016]大森林
  • [AI 大模型] 百度 文心一言