算法D36 | 贪心算法5 | 435. 无重叠区间 763.划分字母区间 56. 合并区间

今天的三道题目,都算是 重叠区间 问题,大家可以好好感受一下。 都属于那种看起来好复杂,但一看贪心解法,惊呼:这么巧妙! 

还是属于那种,做过了也就会了,没做过就很难想出来。

不过大家把如下三题做了之后, 重叠区间 基本上差不多了

435. 无重叠区间 

代码随想录

和射气球那个题比较像。

Python:

class Solution:def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:if len(intervals)==1: return 0intervals.sort()ans = 0for i in range(1, len(intervals)):if intervals[i][0] < intervals[i-1][1]:intervals[i][1] = min(intervals[i-1][1], intervals[i][1])ans += 1return ans

C++:

class Solution {
public:static bool cmp(const vector<int>& a, const vector<int>& b) {return a[0] < b[0];}int eraseOverlapIntervals(vector<vector<int>>& intervals) {if (intervals.size()==1) return 0;sort(intervals.begin(), intervals.end(), cmp);int result = 0;for (int i=1; i<intervals.size(); i++) {if (intervals[i][0] < intervals[i-1][1]) {intervals[i][1] = min(intervals[i][1], intervals[i-1][1]);result++;}}return result;}
};

763.划分字母区间 

代码随想录

Python暴力法:

分情况讨论,需要多建一个当前字母集合。

class Solution:def partitionLabels(self, s: str) -> List[int]:occ_dict = {}for i,e in enumerate(s):occ_dict[e] = iresult = []cur_ele_set = set()cur_start = -1for i,e in enumerate(s):if occ_dict[e] > i:cur_ele_set.add(e)elif e in cur_ele_set:cur_ele_set.remove(e)if len(cur_ele_set)==0:result.append(i-cur_start)cur_start = ireturn result

C++贪心:

一是学一下用hash来表示这里的occ_map,会比dictionary更节省空间, 二是卡哥这里用max贪心的思想来更新右节点,用right==i来判断,很巧妙。python版本比较直接。

class Solution {
public:vector<int> partitionLabels(string s) {int hash[27] = {0};for (int i=0; i<s.size(); i++) {hash[s[i] - 'a'] = i;}vector<int> result;int left = -1;int right = 0;for (int i=0; i<s.size(); i++) {right = max(right, hash[s[i]-'a']);if (i==right) {result.push_back(right-left);left = i;}}return result;}
};

56. 合并区间  

本题相对来说就比较难了。

代码随想录

Python:

先按左端点排序,然后按是否overlap分类讨论,看是否更新区间或者结果。

class Solution:def merge(self, intervals: List[List[int]]) -> List[List[int]]:n = len(intervals)if n==1: return intervalsintervals.sort()result = []left, right = intervals[0]for i in range(1, n):if intervals[i][0] > right:result.append([left, right])left, right = intervals[i]else:right = max(right, intervals[i][1])result.append([left, right])                return result

C++:

class Solution {
public:static bool cmp(const vector<int>& a, const vector<int>& b) {return a[0] < b[0];}vector<vector<int>> merge(vector<vector<int>>& intervals) {if (intervals.size()==1) return intervals;sort(intervals.begin(), intervals.end(), cmp);vector<vector<int>> result;int left = intervals[0][0];int right = intervals[0][1];for (int i=1; i<intervals.size(); i++) {if (intervals[i][0]>right) {result.push_back(vector<int> {left, right});left = intervals[i][0];right = intervals[i][1];} else {right = max(right, intervals[i][1]);}}result.push_back(vector<int> {left, right});return result;}
};

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

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

相关文章

⭐北邮复试刷题2369. 检查数组是否存在有效划分__DP (力扣每日一题)

2369. 检查数组是否存在有效划分 给你一个下标从 0 开始的整数数组 nums &#xff0c;你必须将数组划分为一个或多个 连续 子数组。 如果获得的这些子数组中每个都能满足下述条件 之一 &#xff0c;则可以称其为数组的一种 有效 划分&#xff1a; 子数组 恰 由 2 个相等元素…

初学arp欺骗

首先准备一台靶机这里用虚拟机的win10 已知网关与ip地址&#xff08;怕误伤&#xff09; 现在返回kali从头开始 首先探测自己的网关 然后扫内网存活的ip 发现有3台 用nmap扫一下是哪几台 成功发现我们虚拟机的ip 现在虚拟机可以正常访问网络 接下来直接开梭 ip网关 返回虚拟机…

win11部署自己的privateGpt(2024-0304)

什么是privateGpt? privategpt开源项目地址 https://github.com/imartinez/privateGPT/tree/main 官方文档 https://docs.privategpt.dev/overview/welcome/welcome PrivateGPT是一个可投入生产的人工智能项目&#xff0c;利用大型语言模型&#xff08;LLMs&#xff09;的…

智能通用平台(Intelligent General-purpose Platform)

根据2024年的最新人工智能技术发展趋势&#xff0c;我为您提出的项目需求表如下&#xff1a; 项目名称&#xff1a;智能通用平台&#xff08;Intelligent General-purpose Platform&#xff09;项目概述&#xff1a;结合最新的生成式人工智能、多模态学习和量子计算技术&#…

Windows Docker 部署 Jenkins

一、简介 今天介绍一下在 Windows Docker 中部署 Jenkins 软件。在 Windows Docker 中&#xff0c;分为两种情况 Linux 容器和 Windows 容器。Linux 容器是通常大多数使用的方式&#xff0c;Windows 容器用于 CI/CD 依赖 Windows 环境的情况。 二、Linux 容器 Linux 容器内部…

Linux系统宝塔面板搭建Typecho博客并实现公网访问本地网站【内网穿透】

文章目录 前言1. 安装环境2. 下载Typecho3. 创建站点4. 访问Typecho5. 安装cpolar6. 远程访问Typecho7. 固定远程访问地址8. 配置typecho 前言 Typecho是由type和echo两个词合成的&#xff0c;来自于开发团队的头脑风暴。Typecho基于PHP5开发&#xff0c;支持多种数据库&#…

Vue.js中的diff算法:让虚拟DOM更高效

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

516. 最长回文子序列【leetcode】/动态规划

516. 最长回文子序列 给你一个字符串 s &#xff0c;找出其中最长的回文子序列&#xff0c;并返回该序列的长度。 子序列定义为&#xff1a;不改变剩余字符顺序的情况下&#xff0c;删除某些字符或者不删除任何字符形成的一个序列。 示例 1&#xff1a; 输入&#xff1a;s …

【2024.03.05】定时执行专家V7.1最新版GUI界面 - 基于wxWidgets 3.2.4 + CodeBlocks + GCC9.2.0

《定时执行专家》是一款制作精良、功能强大、毫秒精度、专业级的定时任务执行软件。软件具有 25 种【任务类型】、12 种【触发器】触发方式&#xff0c;并且全面支持界面化【Cron表达式】设置。软件采用多线程并发方式检测任务触发和任务执行&#xff0c;能够达到毫秒级的执行精…

Windows C++:深入理解Windows API:用户身份验证、访问令牌获取和权限管理

目录 CreateProcessAsUser介绍 函数原型 参数详解 返回值 使用注意 代码实例 代码解释&#xff1a; 注意事项&#xff1a; 用户身份验证和令牌管理 进程创建和管理 会话和桌面管理 权限和安全 用户身份验证、访问令牌获取和权限管理代码示例 步骤概述 注意事项…

【深度学习笔记】5_5 LeNet

注&#xff1a;本文为《动手学深度学习》开源内容&#xff0c;部分标注了个人理解&#xff0c;仅为个人学习记录&#xff0c;无抄袭搬运意图 5.5 卷积神经网络&#xff08;LeNet&#xff09; 在3.9节&#xff08;多层感知机的从零开始实现&#xff09;里我们构造了一个含单隐藏…

c# 连接oracle 及对应获取数据集

1、数据库配置xml&#xff0c;首先连接成功后会自动创建xml并保存到对应xml&#xff0c;如下 static string ConnPath AppDomain.CurrentDomain.BaseDirectory "ConnOrcle.xml"; 声明xml名称&#xff0c;便于后续写入对应数据库参数 2、创建xml /// <summar…

182基于matlab的半监督极限学习机进行聚类

基于matlab的半监督极限学习机进行聚类&#xff0c;基于流形正则化将 ELM 扩展用于半监督&#xff0c;三聚类结果可视化输出。程序已调通&#xff0c;可直接运行。 182matlab ELM 半监督学习 聚类 模式识别 (xiaohongshu.com)

「滚雪球学Java」:JDBC(章节汇总)

&#x1f3c6;本文收录于「滚雪球学Java」专栏&#xff0c;专业攻坚指数级提升&#xff0c;助你一臂之力&#xff0c;带你早日登顶&#x1f680;&#xff0c;欢迎大家关注&&收藏&#xff01;持续更新中&#xff0c;up&#xff01;up&#xff01;up&#xff01;&#xf…

SpringBoot中实现拦截器和过滤器

1.过滤器和拦截器简述 过滤器Filter和拦截器Interceptor&#xff0c; 在功能方面很类似&#xff0c; 但在具体实现方面差距还是比较大。 1.1 运行顺序不同&#xff1a;Filter →Servlet →Interceptor→Controller&#xff1b;1.2 配置方式不同&#xff1a;Filter在web.xml中…

C# Winform画图绘制圆形

一、因为绘制的圆形灯需要根据不同的状态切换颜色,所以就将圆形灯创建为用户控件 二、圆形灯用户控件 1、创建用户控件UCLight 2、设值用户控件大小(30,30)。放一个label标签,AutoSize为false(不自动调整大小),Dock为Fill(填充),textaglign为居中显示。 private Color R…

微服务架构SpringCloud(2)

热点参数限流 注&#xff1a;热点参数限流默认是对Springmvc资源无效&#xff1b; 隔离和降级 1.开启feign.sentinel.enabletrue 2.FeignClient(fallbackFactory) 3.创建一个类并实现FallbackFactory接口 4.加入依赖 <!--添加Sentienl依赖--><dependency><gro…

C语言如何正确使⽤循环嵌套?

一、问题 循环嵌套的应⽤⾮常⼴泛&#xff0c;如⽆限循环、查找循环、计数循环等&#xff0c;那么如何正确使⽤它呢&#xff1f; 二、解答 正确的循环嵌套模式是这样的&#xff1a;在⼀个循环结构当中包含另外⼀个循环结构&#xff0c;就像玩具套娃⼀样&#xff0c;⼀层套⼀层…

机器学习笔记 大语言模型是如何运作的?一、语料库和N-gram模型

一、语料库 语言模型、ChatGPT和人工智能似乎无处不在。了解大型语言模型(LLM)“背后”发生的事情将是驾驭数字世界的关键。 首先在提示中键入一个单词,然后点击提交。您可以尝试新的提示,并根据需要多次重新生成响应。 这个我们称之为“T&C”的语言模型是在一…

量子效应可以消灭熵

按照热寂论&#xff0c;宇宙最终达到热平衡&#xff0c;死气沉沉&#xff0c;此时熵最大。那么这一切就没有希望了吗&#xff1f; 我于是提出一个想法&#xff1a; 只要有量子效应&#xff0c;经过足够长时间&#xff08;期间无数次的变化&#xff09;&#xff0c;就会再次发…