贪心算法day05

 435. 无重叠区间  

本题简单一些,估计大家不用想着贪心 ,用自己直觉也会有思路。 

代码随想录

力扣题目链接(opens new window)

给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。

注意: 可以认为区间的终点总是大于它的起点。 区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。

看到题目的第一想法

        移除区间

        先排序,使用linkedList,把排序好的存入,遍历看是否重叠,若重叠则移除前一个,从前往后移除

        且count++,i--

        [[1,100],[11,22],[1,11],[2,12]] 这个案例没实现

看到代码随想录之后的想法

         若重叠,则把两者的右区间更新为两个的最小的右区间,看与下面是否重叠,result++

         若不重叠,则往下走

自己实现过程中遇到的困难

        记住这种操作方式,如果重叠则更新两者的最右边

        有时候可以倒过来想问题,比如说重叠做什么操作,我们可以先想一下若不重叠我们先做什么操作 

        这道题若不重叠,则跳过,若重叠,则更新右边界

class Solution {//public int eraseOverlapIntervals(int[][] intervals) {/*//移除后不重叠//找到一个和多个区间重叠的//先排序 若右边界<=下一个左边界 则不重叠//若前一个右边界>下一个左边界则重叠,移除前一个 //第一个值升序排列,第二个值降序//[[1,100],[11,22],[1,11],[2,12]] 这个案例没实现Arrays.sort(intervals,(a,b)->{if(a[0]==b[0]) return b[1]-a[1];return a[0]-b[0];});int remove=0;LinkedList<int[]> list = new LinkedList<>();for(int[] in:intervals){list.add(in);}for(int i=1;i<list.size();i++){//我这种做法,没办法判断两个重叠区间的后续区间是否也重叠if(list.get(i-1)[1]>list.get(i)[0]){list.remove(i-1);i--;remove++;}}return remove;}*///卡哥做法和上一题一样//若inteval[i][1]>inteval[i+1][0] 则count++且把inteval[i+1][1]替换为inteval[i][1]public int eraseOverlapIntervals(int[][] intervals) {Arrays.sort(intervals,(a,b)->{if(a[0]==b[0]) return b[1]-a[1];return a[0]-b[0];});int remove=0;for(int i=1;i<intervals.length;i++){        if(intervals[i-1][1]>intervals[i][0]){intervals[i][1] = Math.min(intervals[i-1][1],intervals[i][1]);remove++;}}return remove;}
}

763.划分字母区间

字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。

示例:

  • 输入:S = "ababcbacadefegdehijhklij"
  • 输出:[9,7,8] 解释: 划分结果为 "ababcbaca", "defegde", "hijhklij"。 每个字母最多出现在一个片段中。 像 "ababcbacadefegde", "hijhklij" 的划分是错误的,因为划分的片段数较少。
看到题目的第一想法

 需要把字符串分割开来

 如何才能按照提议来分片呢?

用map?

     

看到代码随想录之后的想法

         使用一个长度为26的int 数组,遍历一边字符串,存放当前字符的最大下标

          哈希的办法

         然后再遍历字符串,同时记录一下当前区间字符对应的最大下标,若当前区间字符对应的最大下标和当前下标相同,代表前面区间的所有字符的最大下标都比当前下标要小,则划分

        然后指针继续往下走,继续划分

自己实现过程中遇到的困难

       1 没有想到字符对应哈希数组0~25 用于记录最大下标

       2 字符转int 下标,来记录值  int[s.charAt(i)-'0']=i

       3 使用一个left 和right left记录分割字符串的第一个下标,right代表当前区间内元素的最大下标

若right==i 则可以进行分割

        

class Solution {public List<Integer> partitionLabels(String s) {//先把第一个元素分完,看区间里包括了哪些元素,一起代替//用一个map 来判断 是否包括这个//卡哥思路,先用一个数组记录每个元素的最远距离//若当前区域内的最远距离==当前遍历到的下标,则证明当前子串里所有的元素,后面都不会出现,则切分一个字串//存放每个区间的最大下标int[] chars = new int[26];for(int i=0;i<s.length();i++){chars[s.charAt(i)-'a']=i;}int left=0;//往后遍历,存放当前区间的最大下标int right = 0;List<Integer> list = new ArrayList<>();for(int i=0;i<s.length();i++){//遍历这个获取字串right=Math.max(right,chars[s.charAt(i)-'a']);//若当前字符的下标==当前区间的最大下标if(i==right){list.add(right-left+1);left=right+1;}}return list;}
}

 

 56. 合并区间

力扣题目链接(opens new window)

给出一个区间的集合,请合并所有重叠的区间。

示例 1:

  • 输入: intervals = [[1,3],[2,6],[8,10],[15,18]]
  • 输出: [[1,6],[8,10],[15,18]]
  • 解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

示例 2:

看到题目的第一想法

   先排序,然后把所有的数组放入一个linkedList中

   看linkedlist中是否有重叠区间 ,若重叠了则把linkedList中的那个元素移除,同时修改第一个元素

   然后再继续

看到代码随想录之后的想法

        list先存放第一个元素

       若不重叠则add,若重叠则把当前list中的最后一个元素右边界修改,再继续往下遍历(右边界不是修改为当前元素的右边界,而是两者中的最大值)

        

自己实现过程中遇到的困难

                list转成int    list.toArray(new int[list.size()][])

                先考虑不重叠的再考虑重叠的,倒过来想一下,如果一开始想重叠的就会比较繁琐

class Solution {/*public int[][] merge(int[][] intervals) {//如果重叠,则把第一个的第二个元素换成第二个的第二个元素,删除第二个元素Arrays.sort(intervals,(a,b)->{return a[0]-b[0];});LinkedList<int[]> list = new LinkedList<>();for(int[] i:intervals){list.add(i);}for(int i=0;i<list.size()-1;i++){if(list.get(i)[1]>=list.get(i+1)[0]){list.get(i)[1]=Math.max(list.get(i)[1],list.get(i+1)[1]);list.remove(i+1);i--;}}return list.toArray(new int[list.size()][]);}*///卡哥做法不需要删除(时间复杂度比我的提升了70ms)public int[][] merge(int[][] intervals) {//如果重叠,则把第一个的第二个元素换成第二个的第二个元素,删除第二个元素Arrays.sort(intervals,(a,b)->{return a[0]-b[0];});ArrayList<int[]> list = new ArrayList<>();//卡哥做法不需要把所有元素放到数组里,只需要放第一个list.add(intervals[0]);//判断,如果重叠了,则更新上一个,如果没重叠,则加入到数组中for(int i=1;i<intervals.length;i++){if(list.get(list.size()-1)[1]>=intervals[i][0]){//前一个永远在list中,前一个的右边界换成,前后两者右边界的最大值list.get(list.size()-1)[1]=Math.max(list.get(list.size()-1)[1],intervals[i][1]);}else{list.add(intervals[i]);}}return list.toArray(new int[list.size()][]);}
}

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

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

相关文章

Prometheus 不能访问k8s的中的一些metrics的问题(controller-manager、scheduler、etcd)

主要有三个点 controller-manager、scheduler、etcd 参考&#xff1a; https://www.cnblogs.com/ltaodream/p/15448953.html kube-scheduler 在每台master节点执行 vim /etc/kubernetes/manifests/kube-scheduler.yaml 将 --bind-address127.0.0.1 改为 --bind-address…

远程控制软件排名(2024)

远程控制软件是一种技术工具&#xff0c;允许用户通过互联网远程控制他人的计算机。该软件通常用于公司或个人远程管理其他计算机的功能。它们允许用户远程操作他人电脑上的程序、文件或网页&#xff0c;或查看目标计算机的屏幕图片和其他信息。因此&#xff0c;该软件也广泛应…

OpenAI ChatGPT-4开发笔记2024-05:windows下anaconda中设置visual studio code workspace

这里写自定义目录标题 1 安装anaconda和vscode2 Create an Anaconda Environment3 select Python Interpreter4 Workspace5 Open Workspace With File6 开发文件夹加入workspace7 美化 1 安装anaconda和vscode 标配。 2 Create an Anaconda Environment conda create --name…

增删改undo生成量??index是否写undo?Oracle DML语句(insert,update,delete) ‘回滚开销估算‘

--insert操作 undo记录什么 --update操作 undo记录什么 --delete操作 undo记录什么 //index是否写undo&#xff1f; 结论是写。可通过对比加index之前和加index之后的undo生成量进行对比得出结论。 //undo数据产生量 redo中只会记录少量信息,这些信息足以重演事务; undo中也只…

Python字典操作指南,掌握编程中必备的数据结构!

更多Python学习内容&#xff1a;ipengtao.com 字典&#xff08;Dictionary&#xff09;是Python中一种非常重要和常用的数据结构&#xff0c;它用于存储键-值对的数据。在Python中&#xff0c;字典是可变&#xff08;Mutable&#xff09;的、无序&#xff08;Unordered&#xf…

计算机视觉入门与调优

大家好啊&#xff0c;我是董董灿。 在 CSDN 上写文章写了有一段时间了&#xff0c;期间不少小伙伴私信我&#xff0c;咨询如何自学入门AI&#xff0c;或者咨询一些AI算法。 90%的问题我都回复了&#xff0c;但有时确实因为太忙&#xff0c;没顾得过来。 在这个过程中&#x…

Go调用jenkins api执行流水线构建与停止

用到的库&#xff1a; "github.com/bndr/gojenkins" 代码如下&#xff0c;一次到位&#xff1a; import ("context""fmt""time""github.com/bndr/gojenkins" )// 构建指定任务 func buildJob(ctx context.Context, jenkins…

Spark调优解析-sparkshuffle和程序开发优化2(七)

1Shuffle调优 1.1调优概述 大多数Spark作业的性能主要就是消耗在了shuffle环节&#xff0c;因为该环节包含了大量的磁盘IO、序列化、网络数据传输等操作。因此&#xff0c;如果要让作业的性能更上一层楼&#xff0c;就有必要对shuffle过程进行调优。但是也必须提醒大家的是&a…

勒索事件急剧增长,亚信安全发布《勒索家族和勒索事件监控报告》

近期(12.15-12.21)态势快速感知 近期全球共发生了247起攻击和勒索事件&#xff0c;勒索事件数量急剧增长。 近期需要重点关注的除了仍然流行的勒索家族lockbit3以外&#xff0c;还有本周top1勒索组织toufan。toufan是一个新兴勒索组织&#xff0c;本周共发起了108起勒索攻击&a…

Springboot和Spring有什么区别

SpringBoot和Spring的关系 不是&#xff1a;从马车到汽车那种交通出行的颠覆&#xff0c;从燃油车到纯电动车那种能源利用的变革&#xff0c;从人工驾驶到AI智能那种驾驶方式的升级。总之&#xff0c;不是产品的升级换代&#xff0c;不是谁要替换谁。而是&#xff1a;汽车从手…

基于数据库和NER构建知识图谱流程记录

文章目录 环境准备拓扑设计构建流程设计文件流设计交互解析算法实现数据库交互NER解析相似度计算 基于数据库的文件生成从数据库中读取字段将字段后处理后保存为文件 基于文件的知识图谱构建bug修改与算法优化图数据库连接问题批量构建知识图谱问题批量删除边问题空值处理问题去…

集成开发环境(IDE)的用途?

集成开发环境&#xff08;IDE&#xff09;是一种用于提供程序开发环境的应用程序&#xff0c;它集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套。以下是IDE的一些主要用途&#xff1a; 1.提供代码编写功能&#xff1a;IDE可以提供代码编辑器&…

pygame学习(二)——绘制线条、圆、矩形等图案

导语 pygame是一个跨平台Python库(pygame news)&#xff0c;专门用来开发游戏。pygame主要为开发、设计2D电子游戏而生&#xff0c;提供图像模块&#xff08;image&#xff09;、声音模块&#xff08;mixer&#xff09;、输入/输出&#xff08;鼠标、键盘、显示屏&#xff09;模…

商城小程序(5.商品列表)

目录 一、定义请求参数对象二、获取商品列表数据三、渲染商品列表结构四、把商品item封装为自定义组件五、使用过滤器处理价格六、上拉加载更多七、下拉刷新八、点击商品item项跳转到详情页面 这章主要完成商品列表页面的编写&#xff1a;位于subpkg分包下的goods_list页面 一…

Python常用代码大全

1、Hello World 1 print("Hello World!") 这段代码使用 print 函数输出字符串 “Hello World!” 到控制台。 2、计算数字的平方和 以下是使用 python 计算数字的平方和的代码&#xff1a; 1 2 3 4 5 6 7 def square_sum(numbers): sum 0 for num in n…

【竞技宝】DOTA2:二号位地位发生变化 圣斧、血棘助法核重回巅峰!

北京时间2024年1月5日&#xff0c;目前国服已经更新7.35b版本一段时间了&#xff0c;在这段时间里&#xff0c;各位看官是否感受到了比赛节奏和英雄胜率方面的变化呢&#xff1f;从全分段的出场率以及胜率的变化来看&#xff0c;二号位在游戏内的地位已经发生了很大的变化。 在…

DrGraph原理示教 - OpenCV 4 功能 - 膨胀腐蚀

在二值图的结果基础上&#xff0c;可针对性处理。 这些处理有些是概念上的&#xff0c;有些是原理上的&#xff0c;也有形态上的&#xff0c;那就看用途与目的了。 本质上还是对二值图的黑白点进行处理&#xff0c;以用于图像增强、边缘检测、图像分割等多个领域。比如膨胀与腐…

Capsolver:解决Web爬虫中CAPTCHA挑战的最优解决方案

Web爬虫已经成为从各种在线来源提取和分析数据的不可或缺的技术。然而&#xff0c;在Web爬取过程中&#xff0c;经常会遇到的一个共同挑战是CAPTCHA。CAPTCHA&#xff08;完全自动化的公共图灵测试&#xff0c;用于区分计算机和人类&#xff09;是一种安全措施&#xff0c;旨在…

vue3中使用elementplus中的el-tree-select,自定义显示名称label

<el-tree-select v-model"addPval" node-key"id" :data"menulists" :render-after-expand"false" :props"menuProps" /> <el-divider />let menuProps {//自定义labellabel: (data: { name: any; }) > {ret…

Asp .Net Core系列:基于MySQL的DBHelper帮助类和SQL Server的DBHelper帮助类

文章目录 MySQLDBHelperMSSQLDBHelper MySQLDBHelper app.config中添加配置 <connectionStrings><add name"MySqlConn" connectionString"serverlocalhost;port3306;userroot;password123456;databasedb1;SslModenone"/></connectionStrin…