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

leetcode56-合并区间

leetcode 56
在这里插入图片描述

思路

排序

本题可以不按照数组的顺序返回,只要最终的结果是没有重复区间的即满足条件,所以我们可以先进行排序
按照每个区间的左边界对区间进行排序。排序的目的是为了确保每个区间的起始位置按照升序排列,这样我们就可以逐个检查是否存在重叠的区间

排序以后可能出现的情况

nums = [[1,2] [3,4]] 这种情况是没有重叠的,不需要合并
nums = [[1,4] [3,5]]
nums. = [[1,5] [3,4]]
后面两种情况是需要进行合并的,当第二项的第一位是小于第一项的第二位的时候,就一定会有重复区间,此时就需要进行合并两项数组,合并以后的第一位毫无疑问取最小的值:第一项的第一位
那么合并后的第二位取什么值呢?合并以后的第二位需要取最大的值,就要判断第一项的第二位和第二项的第二位谁更大

合并重叠区间

排序后,我们可以使用一个新的数组 result 来存储合并后的区间

  • 初始化:首先把排序后的第一个区间放入 result 数组中

从第二个区间开始,遍历剩余的区间。如果当前区间的左边界小于等于 result 数组中最后一个区间的右边界,则说明这两个区间有重叠,需要进行合并。合并的方式是更新最后一个区间的右边界为这两个区间的最大右边界

没有重叠:如果当前区间的左边界大于 result 数组中最后一个区间的右边界,说明没有重叠,可以直接将当前区间添加到 result 数组中

遍历完成后,result 数组中存储的就是所有不重叠的区间,最终返回这个结果

实现

/*** 本题关键是intervals不用按照原来题目中的顺序放回,只要结果是恰好覆盖了输入中的所有区间,没有重复的区间范围就可以* @param {number[][]} intervals* @return {number[][]}*/
var merge = function (intervals) {// 按照左边界进行排序intervals.sort((a, b) => a[0] - b[0])let result = [intervals[0]];for (let i = 1; i < intervals.length; i++) {const item = result[result.length - 1]if (item[1] >= intervals[i][0]) {// 有重叠,需要合并item[1] = Math.max(item[1], intervals[i][1])} else {// 无重叠result.push(intervals[i])}}return result
};
http://www.xdnf.cn/news/12756.html

相关文章:

  • 常见查找算法原理与应用详解
  • pandas 字符串存储技术演进:从 object 到 PyArrow 的十年历程
  • C语言内存管理和编译优化实战
  • Fetch API 使用详解:Bearer Token 与 localStorage 实践
  • LeetCode面试经典150题—合并两个有序数组—LeetCode88
  • 机器学习算法_决策树
  • OC—UI学习-2
  • Linux安全加固:从攻防视角构建系统免疫
  • [创业之路-410]:经济学 - 国富论的核心思想和观点,以及对创业者的启发
  • 【11408学习记录】考研写作双核引擎:感谢信+建议信复合结构高分模板(附16年真题精讲)
  • 【优选算法】位运算
  • Python Flask文件处理与异常处理实战指南
  • Boost ASIO 库深入学习(3)
  • DBAPI如何优雅的获取单条数据
  • 【RTP】Intra-Refresh模式下的 H.264 输出,RTP打包的方式和普通 H.264 流并没有本质区别
  • webrtc 在线测试, 如何在线拉流测试
  • 实战:如何用SCINet增强YOLOv8在低照度下的目标检测性能(附完整代码)
  • 从入门到实战:AI学习路线全解析——避坑指南
  • CMake指令:project
  • C++动态规划-01背包
  • shell批量添加新用户
  • uni-app学习笔记三十--request网络请求传参
  • 基于 llama-factory进行模型微调
  • android关于pthread的使用过程
  • 【CBAP50技术手册】#39 Roles and Permissions Matrix(角色与权限矩阵):业务分析师的“秩序守护器”
  • 横向对比npm和yarn
  • 基于Vue3.0的在线工具网站
  • 26考研——数据的表示和运算_整数和实数的表示(2)
  • (三)Linux性能优化-CPU-CPU 使用率
  • 强化学习选择rule-based的reward func还是使用reward model / RLAIF?