leetcode 57. Insert Interval

题目描述

代码:由于intervals已经按照左端点排序,并且intervals中的区间全部不重叠,那么可以断定intervals中所有区间的右端点也已经是有序的。先二分查找intervals中第一个其右端点>=newInterval左端点的区间。然后按照类似于56. Merge Intervals中的方法合并区间。

class Solution {
public:vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {vector<vector<int>> res;int len = intervals.size();if(len == 0){res.push_back(newInterval);return res;}res.reserve(len);//二分查找第一个其右端点>=newInterval左端点的区间int idx = bs(intervals,newInterval[0]);for(int i = 0;i < idx;i++){res.push_back(intervals[i]);}if(idx==len){res.push_back(newInterval);}else{bool to_insert_flag = true;int left = newInterval[0];int right =newInterval[1];if(right<=intervals[idx][1]){if(right<intervals[idx][0]){res.push_back(newInterval);res.push_back(intervals[idx]);}else{left  = min(left,intervals[idx][0]);right = intervals[idx][1];res.push_back({left,right});}idx++;to_insert_flag = false;}else{left = min(left,intervals[idx][0]);idx++;}while(idx < len){if(to_insert_flag){if(right>=intervals[idx][0]){right = max(right,intervals[idx][1]);}else{res.push_back({left,right});res.push_back(intervals[idx]);to_insert_flag = false;}}else{res.push_back(intervals[idx]);}idx++;}if(to_insert_flag){res.push_back({left,right});}}return res;}//二分查找,第一个其右端点>=target的区间int bs(vector<vector<int>>& intervals,int target){int left = 0;int right = intervals.size();int mid = 0;while(left < right){mid = left + ((right-left)>>1);if(intervals[mid][1] >= target){right = mid;}else{left = mid+1;}}return left;}
};

以上做法的时间复杂度是O(logn+n)=O(n)。实际上没有必要查找。直接一趟遍历也可以解决。

class Solution {
public:vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {vector<vector<int>> res;int len = intervals.size();res.reserve(len+1);bool to_insert = true;//为true表示新区间还没有被插入for(int i = 0;i <len;i++){if(to_insert){if(intervals[i][0] > newInterval[1]){//新区间在当前区间的左侧,两者没有重叠res.push_back(newInterval);res.push_back(intervals[i]);to_insert = false;}else if(intervals[i][1] < newInterval[0]){//新区间在当前区间的右侧,两者没有重叠res.push_back(intervals[i]);}else{//新区间和当前区间重叠,将它们合并结果作为新的新区间newInterval[0] = min(newInterval[0],intervals[i][0]);newInterval[1] = max(newInterval[1],intervals[i][1]);}}else{res.push_back(intervals[i]);}}if(to_insert)res.push_back(newInterval);return res;}
};

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/80205.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

去年开发一款鸿蒙Next Os的window工具箱

持拖载多个鸿蒙应用 批量签名安装 运行 http://dl.lozn.top/lozn/HarmonySignAndFileManagerTool_2024-11-26.zip 同类型安卓工具箱以及其他软件下载地址汇总 http://dl.lozn.top/lozn/ 怎么个玩法呢&#xff0c;比如要启动某app, 拖载识别到包名 点启动他能主动读取包名 然后…

Trivy:让你时刻掌控的开源安全扫描器

深入了解 Trivy:全面的安全扫描工具 在如今互联网快速发展的时代,软件的安全性显得尤为重要。随着应用程序的复杂性增加,其可能带来的安全漏洞也在不断增多。如何快速、准确地发现这些潜在威胁是每个开发者和运维人员心中的课题。今天,我们将为大家介绍一个开源的安全扫描…

网址为 http://xxx:xxxx/的网页可能暂时无法连接,或者它已永久性地移动到了新网址

这是由于浏览器默认的非安全端口所导致的&#xff0c;所谓非安全端口&#xff0c;就是浏览器出于安全问题&#xff0c;会禁止一些网络浏览向外的端口。 避免使用6000,6666这样的端口 6000-7000有很多都不行&#xff0c;所以尽量避免使用这个区间 还有在云服务器中&#xff0c…

Jenkins 执行器(Executor)如何调整限制?

目录 现象原因解决 现象 Jenkins 构建时&#xff0c;提示如下&#xff1a; 此刻的心情正如上图中的小老头&#xff0c;火冒三丈&#xff0c;但是不要急&#xff0c;因为每一次错误&#xff0c;都是系统中某个环节在说‘我撑不住了’。 原因 其实是上图的提示表示 Jenkins 当…

运维实施31-NFS服务

NFS概述 NFS&#xff08;Network File System&#xff09;网络文件系统&#xff0c;主要用于Linux系统上实现文件共享的一种协议&#xff0c;其客户端主要是Linux。 没有用户认证机制&#xff0c;且数据在网络上传送的时候是明文传送&#xff0c;一般只能在局域网中使用支持多…

蓝牙协议架构与调试工具详解(含 BLE、HCI 命令、调试命令)

本文介绍蓝牙协议从物理层到应用层的完整通信流程&#xff0c;并详解了 Linux 下主流蓝牙调试工具的使用方法&#xff0c;适用于嵌入式蓝牙驱动开发、BLE调试、通信协议分析等场景。 &#x1f527; 1. 蓝牙架构概览 ✅ 芯片架构 单模芯片&#xff1a;仅支持 BLE 或 Classic 蓝…

激光雷达定位算法在FPGA中的实现——section3 Matlab实现和校验

1、校验section2的计算方法是否正确 以section1里面的图示 举个例子: 1.1 手动计算 可以计算出4*4方阵C相关参数: 可以计算出余子式矩阵C_1相关参数:

数据结构(2)线性表-顺序表

知道一个算法的好坏怎么去判断以后&#xff0c;就该正式的去学习一些常见的数据结构&#xff0c;当然&#xff0c;这里的数据结构仅仅是初阶&#xff0c;不会挨个一个一个学完&#xff0c;后期慢慢来。 一、数据结构总论 一般按照逻辑结构和存储结构来分类&#xff0c;在初阶…

性能测试详解

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、什么是性能测试 先看下百度百科对它的定义 性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试 我们可以认为…

每日Prompt:三只动物与地标自拍磨砂玻璃后的虚实对比剪影

提示词 一张黑白照片&#xff0c;展示了一个[主体]在磨砂或半透明表面后的模糊剪影。其[部分]轮廓清晰&#xff0c;紧贴表面&#xff0c;与其余朦胧、模糊的身影形成鲜明对比。背景是柔和的灰色渐变色调&#xff0c;增强了神秘和艺术的氛围。

Android多媒体——媒体解码器初始化(十五)

通过上一篇文章我们了解了媒体解码器的创建过程,并且可以看到,在媒体解码器创建成功后,分别调用了 configure()、setCallback() 和 start() 函数来对解码器进行配置、回调和启动。这里我们就来详细看一下这几个过程。 一、配置解码器 首先看一下解码器的配置,在 NuPlayerD…

每周资讯 | 腾讯Q1财报:国内游戏业务收入同比增长24%;Tripledot 8亿美元收购AppLovin游戏业务

内容速览&#xff1a; 广州“服务贸易和数字贸易22条”助推游戏产业发展Tripledot Studios 8亿美元收购AppLovin游戏业务苹果紧急申请暂停执行AppStore新规4月中国手游出海收入下载榜&#xff0c;点点互动《Kingshot》收入激增 腾讯Q1财报&#xff1a;国内游戏业务收入同比增长…

本地跑通vue-element-admin项目

GitHub - PanJiaChen/vue-element-admin: :tada: A magical vue admin https://panjiachen.github.io/vue-element-admin 通过加速clone到本地 git clone https://gitclone.com/github.com/PanJiaChen/vue-element-admin.git # 进入项目目录 cd vue-element-admin # 安装依赖…

Go语言交替打印问题及多种实现方法

Go语言交替打印问题及多种实现方法 在并发编程中&#xff0c;多个线程&#xff08;或 goroutine&#xff09;交替执行任务是一个经典问题。本文将以 Go 语言为例&#xff0c;介绍如何实现多个 goroutine 交替打印数字的功能&#xff0c;并展示几种不同的实现方法。 Go 语言相关…

支持蓝牙5.0和2.4G私有协议芯片-PHY6222

PHY6222QC-W04C 是一款适用于蓝牙低功耗&#xff08;BLE&#xff09;5.2 应用的片上系统&#xff08;SoC&#xff09;。它搭载 ARM Cortex™-M0 32 位处理器&#xff0c;配备 64KB SRAM、512K Flash、96KB ROM、256 bit efuse &#xff0c;以及超低功耗、高性能的多模式射频模块…

git相关配置

git相关配置 欢迎使用Markdown编辑器修改Git默认编辑器为vimgit配置默认用户名和密码&#xff1a; 欢迎使用Markdown编辑器 修改Git默认编辑器为vim #方法1&#xff1a;直接执行 git config --global core.editor vim#方法2&#xff1a;修改git的配置文件.git/config文件&am…

C语言实现INI配置文件读取和写入

一.INI文件介绍 INI配置文件是一种简单的文本文件&#xff0c;用于存储配置信息&#xff0c;通常由一个或多个节&#xff08;section&#xff09;组成&#xff0c;每个节包含多个键值对&#xff08;Key-Value&#xff09;格式。INI文件易于阅读和编辑&#xff0c;广泛应用于多…

Vue 3 打开 el-dialog 时使 el-input 获取焦点

运行代码&#xff1a;https://andi.cn/page/622178.html 效果&#xff1a;

【程序员AI入门:模型】19.开源模型工程化全攻略:从选型部署到高效集成,LangChain与One-API双剑合璧

一、模型选型与验证&#xff1a;精准匹配业务需求 &#xff08;一&#xff09;多维度评估体系 通过量化指标权重实现科学选型&#xff0c;示例代码计算模型综合得分&#xff1a; # 评估指标权重与模型得分 requirements {"accuracy": 0.4, "latency": …

卡顿检测与 Choreographer 原理

一、卡顿检测的原理 卡顿的本质是主线程&#xff08;UI 线程&#xff09;未能及时完成某帧的渲染任务&#xff08;超过 16.6ms&#xff0c;以 60Hz 屏幕为例&#xff09;&#xff0c;导致丢帧&#xff08;Frame Drop&#xff09;。检测卡顿的核心思路是监控主线程任务的执行时…