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

LeetCode面试题Day16|LC56 合并区间、LC57 插入区间

题目一:

指路:

. - 力扣(LeetCode)56 合并区间

思路与分析:

本题题意清晰易懂,当区间有重叠元素时返回能覆盖这些重叠区间的大区间,否则就返回无重叠区间。那么判断区间是否有重叠只需要按照区间各自的左边界升序排序,如果前一个区间的右边界大于后一个区间的左边界时则说明当前两区间有重叠元素。那么在将答案添加进结果集时,按照区间左边界升序之后,第一个区间的左边界一定是最小的,可以直接添加进结果集,那么添加右边界时需要判断判断一下哪个区间有较大的右边界,返回即可,最后添加无重叠元素的单个区间。

代码:

class Solution {static bool cmp(vector<int>& a, vector<int>& b) {return a[0] < b[0];  // 根据左边界排序}
public:vector<vector<int>> merge(vector<vector<int>>& intervals) {vector<vector<int>> result;  // 最终结果集vector<int> path;if (intervals.size() == 0) return result;sort(intervals.begin(), intervals.end(), cmp);result.push_back(intervals[0]);  // for (int i = 1; i < intervals.size(); i++) {if (result.back()[1] >= intervals[i][0]) {  //// 末尾元素的右边界 >= 当前元素左边界(两区间有重叠)result.back()[1] = max(result.back()[1], intervals[i][1]);// 右边界 = 最大的右边界} else {result.push_back(intervals[i]);  // 无重叠的区间}}return result;}
};

题目二:

指路:

. - 力扣(LeetCode)57 插入区间

思路与分析:

本题中,我们可以读出的信息是:1.给定的若干个区间无重叠(上一个区间的右边界小于下一个区间的左边界);2.给定的若干个区间已经按照左边界升序排序;3.需要在给定的区间插入给定的新区见使插入后的区间依旧按照左边界排序同时各个区间无重叠(这就要求加入的区间左边界大于原某一区间的右边界而加入区间的右边界小于原某一区间的左边界);4.必要时可以合并区间意为当与第三条发生冲突时将两区间合并得到一个新区间从而满足第三条。那么我们将原区间与加入区间的情况分为以下几种,原某一区间在加入区间的右侧,当需要加入的区间还未加入时,那么我们可以直接加入需要加入的区间继而加入原区间的左右区间;又或是原区间在需要加入区间的左边二者依旧无重叠,此时返回原区间的左右边界继而返回新加入区间的左右边界;最后是两区间有重叠,此时需要返回较小的左边界和较大的右边界。

代码:

class Solution {
public:vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {vector<vector<int>> ans;bool placed = false;for (int i = 0; i < intervals.size(); i++) {if (intervals[i][0] > newInterval[1]) {  // 在插入区间的右侧无重叠if (!placed) {  // ans.push_back({newInterval[0], newInterval[1]}); placed = true;} ans.push_back({intervals[i][0], intervals[i][1]});} else if (intervals[i][1] < newInterval[0]) {  // 无重叠ans.push_back({intervals[i][0], intervals[i][1]});} else {  // 返回较小左边界和较大右边界newInterval[0] = min(newInterval[0], intervals[i][0]);newInterval[1] = max(newInterval[1], intervals[i][1]);}}if (!placed) {  // ans.push_back({newInterval[0], newInterval[1]});}return ans;}
};

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 浅谈Java SpringBoot和Spring区别
  • 【Linux】05.Linux 下的编辑器——vim
  • C语言 | Leetcode C语言题解之第373题查找和最小的K对数字
  • 学懂C++(四十五 ):深入详解C++ STL 容器:从基础到进阶
  • 深度学习——分布式训练
  • Webpack中的 HTTP 压缩
  • c语言个人笔记
  • netty编程之实现HTTP服务
  • 采用java或者python获取视频流的方法
  • 【功能实现】axios实现动态数据
  • 【卡码网C++基础课 13.链表的基础操作1】
  • 婚恋交友系统该如何制作成品系统?
  • Spring Boot 全局异常@ControllerAdvice和@RestControllerAdvice的区别
  • C#入门(15)while循环和do—while循环
  • SpringMVC核心机制环境搭建
  • angular2 简述
  • Fastjson的基本使用方法大全
  • Flannel解读
  • Markdown 语法简单说明
  • Nacos系列:Nacos的Java SDK使用
  • React Transition Group -- Transition 组件
  • Spring Boot快速入门(一):Hello Spring Boot
  • 工作手记之html2canvas使用概述
  • 京东美团研发面经
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 入门级的git使用指北
  • 原生js练习题---第五课
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • # 利刃出鞘_Tomcat 核心原理解析(二)
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • $forceUpdate()函数
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (zt)最盛行的警世狂言(爆笑)
  • (纯JS)图片裁剪
  • (定时器/计数器)中断系统(详解与使用)
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (译) 函数式 JS #1:简介
  • (译)计算距离、方位和更多经纬度之间的点
  • (转)iOS字体
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .NET8使用VS2022打包Docker镜像
  • .NET编程C#线程之旅:十种开启线程的方式以及各自使用场景和优缺点
  • .NET开源、简单、实用的数据库文档生成工具
  • .NET开源纪元:穿越封闭的迷雾,拥抱开放的星辰
  • .Net中ListT 泛型转成DataTable、DataSet
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • [APIO2015]巴厘岛的雕塑
  • [BUG]vscode插件live server无法自动打开浏览器
  • [C#]手把手教你打造Socket的TCP通讯连接(一)
  • [HCTF 2018]WarmUp (代码审计)