算法知识点————贪心

贪心:只考虑局部最优解,不考虑全部最优解。有时候得不到最优解。
DP:考虑全局最优解。DP的特点:无后效性(正在求解的时候不关心前面的解是怎么求的);
二者都是在求最优解的,都有最优子结构的性质(子问题的最优解构成当前问题的最优解)。
经典的区间分割问题
1、无重叠区间

思路:如果当前区间的左端点大于等于前一个区间的右端点,说明当前区间可以是一个独立的区间,我们可以保存它,如果当前区间的左端点小于前一个区间的右端点,说明当前区间和前面一个区间重合了,我们需要删除一个区间,那么删除哪个更好呢?很明显是当前这个,因为下一个区间如果和前面那个区间重合了,也肯定和当前区间重合,这时候又要删除一个区间,但是下一个区间如果和当前区间重合,那么把当前区间删除后,不一定会和前面的区间重合。所以不论是Case 2还是Case 3我们都应该删除current区间。因此我们只需要不断的维护前一个保留区间的右端点即可,只有当当前区间的左端点大于前一个保留区间右端点时,我们才更新保留区间。
在这里插入图片描述

class Solution {
public:int eraseOverlapIntervals(vector<vector<int>>& intervals) {int len = intervals.size();if(len == 1) return 0;sort(intervals.begin(),intervals.end(),[](const auto& u,const auto& v){return u[1] < v[1];});int base = intervals[0][1];//第一个里面的右边界int cnt = 1;for(int i=1;i<len ;i++){// 若当前区间与最近区间没有重叠,则移动到当前区间进行后续判定(之后的区间不可能与最近区间重叠)// 若当前区间与最近区间重叠,则删除二者中右边界更靠后的if(intervals[i][0] >= base){cnt++;            //统计非重叠的区间数量base = intervals[i][1];}}return len - cnt;}
};
//排序规则:
//先对右边界排序,右边界相同的时候左边界大的排在前面

区间合并类型的问题一般都要对左端点或者右端点进行排序,然后再进行区间的合并就方便了,因为左端点或者右端点已经有序了。
对这道题来说前后紧挨着的区间的相对位置关系只有3种:
对这道题来说前后紧挨着的区间的相对位置关系只有3种:

1.  st1             ed1    两区间相互包含st2    ed22.  st1        ed1         两区间不完全包含但有交叉st2         ed23.  st1        ed1         两区间完全没有交集st2        ed24. 不会出现这种情况      st1       ed1     因为之前对区间的左端点排过序了,后面区间的左端点不st2        ed2          可能超过前面区间的左端点最多相同。

2、合并区间://按照左边界排序

class Solution {
public:vector<vector<int>> merge(vector<vector<int>>& intervals) {vector<vector<int>> res;sort(intervals.begin(),intervals.end(),[](const vector<int>& a,const vector<int>& b){if(a[0] == b[0]) return a[1] < b[1]; //左边界相等时按右边界排return a[0] < b[0] ;//先按照左边界排序});//记录新区间的左右端点,判断当前区间能否合并int left = intervals[0][0],right = intervals[0][1];for(auto interval : intervals){//当前区间左端点小于当前右边界,合并,并更新可能增大的右边界//当前区间左端点大于当前右边界,记录新的区间,进入下一个新区间构建if(interval[0] <= right && interval[1] > right){right = interval[1];continue;}if(interval[0] > right){res.push_back({left,right});left = interval[0];right = interval[1];}}res.push_back({left,right});//添加最后一个区间return res;}
};
//按照左边界排序

3、区间列表的交集

两个指针分别指向列表区间的开头
每次求得两个区间的交集(左端点取max,右端点取min)
每次将右端点靠后的区间指针向后移动。比较的时候舍弃右边界小的
在这里插入图片描述

class Solution {
public:vector<vector<int>> intervalIntersection(vector<vector<int>>& firstList, vector<vector<int>>& secondList) {int len1 = firstList.size();int len2 = secondList.size();vector<vector<int>> res;int i =0,j =0;while(i < len1 && j < len2){int l = max (firstList[i][0],secondList[j][0]);int r = min(firstList[i][1],secondList[j][1]);if(l <= r) res.push_back({l,r});if(firstList[i][1] == secondList[j][1]) {i++;j++;} else if(firstList[i][1] < secondList[j][1]) i++;else j++;}return res;}
};

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

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

相关文章

电脑无法无线投屏的解决办法

在前司的时候经常遇到电脑无法使用无线投屏器的情况&#xff0c;今天就来聊聊如何解决。 1.不会连接。这种情况&#xff0c;经常发生在WIN10升级WIN11之后&#xff0c;一般是两种办法&#xff0c;一种是同时按键盘上的WINDOWS和K键&#xff0c;右下角就会出来连接的图标&#…

TryHackMe 第7天 | Web Fundamentals (二)

继续介绍一些 Web hacking 相关的漏洞。 IDOR IDOR (Insecure direct object reference)&#xff0c;不安全的对象直接引用&#xff0c;这是一种访问控制漏洞。 当 Web 服务器接收到用户提供的输入来检索对象时 (包括文件、数据、文档)&#xff0c;如果对用户输入数据过于信…

kubelet 运行机制、功能 全面分析

Kubelet 在Kubernetes集群中&#xff0c;在每个Node&#xff08;又称为Minion&#xff09;上都会启动一个Kubelet服务进程。该进程用于处理Master下发到本节点的任务&#xff0c;管理Pod及Pod中的容器。每个Kubelet进程都会在API Server上注册节点自身的信息&#xff0c;定期向…

攻防世界----->Replace

前言&#xff1a;做题笔记。 下载 查壳。 upx32脱壳。 32ida打开。 先运行看看&#xff1a; 没有任何反应&#xff1f; 猜测又是 地址随机化(ASLR)---遇见过。 操作参考&#xff1a; 攻防世界----&#xff1e;Windows_Reverse1_dsvduyierqxvyjrthdfrtfregreg-CSDN博客 然后…

算法6:模拟运算

文章目录 z字形变幻外观数列数青蛙 题目均来自于力扣 z字形变幻 class Solution { public:string convert(string s, int numRows) {int n s.size();if(n < numRows || numRows 1) return s;int d 2 * numRows - 2;string res;for(int j 0; j < n; j d){res s[j]; …

嵌入式硬件设计知识详解

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

游戏盒子推广全攻略:从用户洞察到策略实施

在移动互联网时代&#xff0c;游戏盒子的推广已经成为众多游戏代理商和开发者的重要课题。面对激烈的市场竞争&#xff0c;如何高效吸引并留住玩家&#xff0c;成为游戏盒子推广的关键。本文将结合Xinstall这一专业App推广工具&#xff0c;探讨游戏盒子推广的有效策略。 一、市…

爱心曲线公式大全

local r a*((math.sin(angle) * math.sqrt(math.abs(math.cos(angle)))) / (math.sin(angle) 1.4142) - 2 * math.sin(angle) 2) local x r * math.cos(angle) -- 计算对应的x值 local z r * math.sin(angle) 1.5*a - --曲线公式绘画 local function generateParabola()…

VMware Tools 安装和配置

1. 使用 ISO 映射文件&#xff0c;并且选择.iso文件 2. 启动虚拟机&#xff0c;如果 VMware Tools 是灰色的&#xff0c;那么卸载 open-vm-tools&#xff08;不要重装&#xff09;&#xff0c;重新启动虚拟机。卸载可以参考&#xff1a;重装 open-vm-tools-CSDN博客 3. 拷贝挂载…

关于mac下的nvm设置淘宝镜像源

1. 进入配置文件修改镜像源 vim ~/.bash_profile增加下面内容 export NVM_NODEJS_ORG_MIRRORhttps://npmmirror.com/mirrors/node/2. 查看远程node镜像 nvm ls-remote3. 下载镜像 nvm install 14.17.64. 使用镜像 nvm use 14.17.6

Vue入门-指令学习-v-show和v-if

v-show&#xff1a; 作用&#xff1a;控制元素的显示隐藏 语法&#xff1a;v-show"表达式" 表达式值true显示&#xff0c;false隐藏 v-if 作用&#xff1a;控制元素的显示隐藏&#xff08;条件渲染&#xff09; 语法&#xff1a; vif"表达式" 表达式tr…

No.8 笔记 | SQL 查询语句:数据探索的钥匙

2024/10/7 心记 - 致在路上默默奋斗的你 在当今数字化的时代&#xff0c;网络安全已成为我们生活中不可或缺的一部分。它如同守护数字世界的隐形盾牌&#xff0c;保护着我们的隐私、数据和整个社会的稳定运行。 学习网络安全&#xff0c;是踏上一段充满挑战与机遇的征程。 每一…

leetcode C++特性 AIDL的一些细节

leetcode细节 C的一些特性 【C基础】std::move用法介绍-CSDN博客 c thread的join和joinable的区别_thread joinable-CSDN博客 C线程介绍_std::thread 头文件-CSDN博客 https://blog.csdn.net/weixin_46645965/article/details/136259902 【C】—— 观察者模式-CSDN博客 C 迭…

知识图谱入门——5:Neo4j Desktop安装和使用手册(小白向:Cypher 查询语言:逐步教程!Neo4j 优缺点分析)

Neo4j简介 Neo4j 是一个基于图结构的 NoSQL 数据库&#xff0c;专门用于存储、查询和管理图形数据。它的核心思想是使用节点、关系和属性来描述数据。图数据库非常适合那些需要处理复杂关系的数据集&#xff0c;如社交网络、推荐系统、知识图谱等领域。 与传统的关系型数据库…

erlang学习:Linux命令学习9

sed命令介绍 sed全称是&#xff1a;Stream EDitor&#xff08;流编辑器&#xff09; Linux sed 命令是利用脚本来处理文本文件&#xff0c;sed 可依照脚本的指令来处理、编辑文本文件。Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等 sed 的运行…

Windows环境下使用Docker配置MySQL数据库

用Docker配置数据库&#xff0c;无论是做开发&#xff0c;还是做生产部署&#xff0c;都非常的方便 它不需要单独安装数据库&#xff0c;也不用担心出现各种环境的配置问题。 本文将分享用Docker配置数据库的步骤&#xff0c;这里用MySQL举例。 其他的数据库如MSSQL&#xf…

信息学奥赛复赛复习14-CSP-J2021-03网络连接-字符串处理、数据类型溢出、数据结构Map、find函数、substr函数

PDF文档回复:20241007 1 P7911 [CSP-J 2021] 网络连接 [题目描述] TCP/IP 协议是网络通信领域的一项重要协议。今天你的任务&#xff0c;就是尝试利用这个协议&#xff0c;还原一个简化后的网络连接场景。 在本问题中&#xff0c;计算机分为两大类&#xff1a;服务机&#x…

12.3 Linux_进程间通信_信号机制

概述 什么是信号&#xff1a; 信号是在软件层次上对中断机制的模拟&#xff08;软中断&#xff09;&#xff0c;是一种异步通信方式。 进程对信号的响应方式&#xff1a; 缺省方式&#xff1a;根据默认行为响应信号忽略信号&#xff1a;不响应信号捕捉信号&#xff1a;根据…

SpringBoot系列 启动流程

文章目录 SpringApplicationSpringApplication#run 启动流程BootstrapContextSpringApplicationRunListenersprepareEnvironmentconfigureEnvironmentconfigurePropertySourcesconfigureProfiles 上下文初始化prepareContextrefreshContextprepareRefreshobtainFreshBeanFactor…

MISC - 第13天(python脚本 重命名文件,拼接二维码,cloacked-pixel工具,中文电码,五笔编码)

前言 各位师傅大家好&#xff0c;我是qmx_07&#xff0c;今天继续讲解MISC的相关知识 [安洵杯 2019]吹着贝斯扫二维码 附件信息: 使用APCHPR暴力破解工具&#xff0c;flag.zip 破解失败可能线索在其他文件&#xff0c;放到hxd查看 在hxd中&#xff0c;发现该文件头JFIF 是j…