java算法day36 | 贪心算法 part05 ● 435. 无重叠区间 ● 763.划分字母区间 ● 56. 合并区间

435. 无重叠区间

在这里插入图片描述

思路: 重叠区间典型题目,先按照左边界排序,再从左到右判断相邻区间是否重叠,重叠则删除其中一个。

class Solution {public int eraseOverlapIntervals(int[][] intervals) {Arrays.sort(intervals,(a,b)->{return Integer.compare(a[0],b[0]);});int remove=0;int pre = intervals[0][1];//存储上一个区间的结尾位置for(int i=1;i<intervals.length;i++){if(intervals[i][0]<pre){//当有重合时,移除结尾较大的元素remove++;pre=Math.min(pre,intervals[i][1]);//更新当前结尾为区间结尾较小的位置}else{pre=intervals[i][1];//否则直接更新pre到当前位置。}}return remove;}
}

时间复杂度:O(nlog n) ,有一个快排
空间复杂度:O(n),有一个快排,最差情况(倒序)时,需要n次递归调用。因此确实需要O(n)的栈空间

763.划分字母区间

在这里插入图片描述

思路: 和45.跳跃游戏II的思路很像

在遍历的过程中相当于是要找每一个字母的边界,如果找到之前遍历过的所有字母的最远边界,说明这个边界就是分割点了。此时前面出现过所有字母,最远也就到这个边界了。

可以分为如下两步:

  • 统计每一个字符最后出现的位置
  • 从头遍历字符,并更新字符的最远出现下标,如果找到字符最远出现位置下标和当前下标相等了,则找到了分割点
class Solution {public List<Integer> partitionLabels(String s) {int[] list=new int[26];//存储字符的最远位置char[] sList=s.toCharArray();for(int i=0;i<sList.length;i++){//初始化最远位置数组list[sList[i]-'a']=i;}List<Integer> res=new ArrayList<>();int end=0;//这一步的最远位置int len=0;//当前走的长度for(int i=0;i<sList.length;i++){len++;end=Math.max(end,list[sList[i]-'a']);if(i==end) {res.add(len);len=0;}}return res;}
}

时间复杂度:O(n)
空间复杂度:O(1),使用的hash数组是固定大小

56. 合并区间

在这里插入图片描述

思路: 本题的本质其实还是判断重叠区间问题。

和 452. 用最少数量的箭引爆气球和 435. 无重叠区间都是一个套路。

这几道题都是判断区间重叠,区别就是判断区间重叠后的逻辑,本题是判断区间重贴后要进行区间合并。

class Solution {public int[][] merge(int[][] intervals) {Arrays.sort(intervals,(a,b)->Integer.compare(a[0],b[0]));int start=intervals[0][0];//动态的开始位置int end=intervals[0][1];//结束位置List<int[]> res=new ArrayList<>();for(int i=1;i<intervals.length;i++){if(intervals[i][0]<=end){//如果有重合end=Math.max(intervals[i][1],end);//更新end位置}else{//没有重合则添加到结果中,并更新start和end的位置res.add(new int[]{start,end});start=intervals[i][0];end=intervals[i][1];}}res.add(new int[]{start,end}); return res.toArray(new int[res.size()][]);}
}

时间复杂度: O(nlogn)
空间复杂度: O(logn),排序需要的空间开销

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

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

相关文章

探索AI大模型学习的未来之路

文章目录 一、引言二、AI大模型学习的理论基础2.1 深度学习2.2 数据处理 三、AI大模型的训练优化与应用实例3.1 训练优化3.2 AI大模型在特定领域的应用实例 四、AI大模型学习的注意点五、AI大模型学习的未来发展趋势与挑战5.1 发展趋势5.2 所面对的挑战 六、结论 一、引言 随着…

Python基础教程:基本数据类型

基本数据类型 不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组) 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合) Numbers(数字) 数字数据类型用于存储数值。 他们是不可改变的数据类型,这意味着改变数字数据类型会分配一个新的对…

【[NOIP1999 普及组] Cantor 表】

题目描述 现代数学的著名证明之一是 Georg Cantor 证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的&#xff1a; 我们以 Z 字形给上表的每一项编号。第一项是 1 / 1 1/1 1/1&#xff0c;然后是 1 / 2 1/2 1/2&#xff0c; 2 / 1 2/1 2/1&#xff0c; 3 / 1 3/1…

是德科技KEYSIGHT N9938A频谱分析仪

181/2461/8938产品概述&#xff1a; N9938A 是一款使用电池供电的便携式微波频谱分析仪&#xff1b;配置还包括全频段跟踪发生器和前置放大器、干扰分析仪、时间选通、VSWR 和反射测量、内置功率计。 N9938A FieldFox 手持式微波频谱分析仪 主要特性和功能 频率范围&#xff…

网络安全:Kali Linux 进行SQL注入与XSS漏洞利用

目录 一、实验 1.环境 2.Kali Linux 进行SQL注入 3.Kali Linux 进行XSS漏洞利用 二、问题 1.XSS分类 2.如何修改beef-xss的密码 3.beef-xss 服务如何管理 4.运行beef报错 5.beef 命令的颜色有哪些区别 6.owasp-top-10 有哪些变化 一、实验 1.环境 &#xff08;1&a…

【LVGL-色环部件】

LVGL-色环部件 ■ LVGL-色环部件■ 示例一 ■ LVGL-色环部件 ■ 示例一 /* 获取当前活动屏幕的宽高 */ #define scr_act_width() lv_obj_get_width(lv_scr_act()) #define scr_act_height() lv_obj_get_height(lv_scr_act())static lv_obj_t* obj;/*** brief 色环事件回调* …

Unity编辑器功能 将选中的文件夹复制一份到其他文件夹

[MenuItem("Ab包工具/将选中的文件移动到StreamingAssets文件夹下")] public static void MoveFireToStreamA() { //得到选中文件的数组 Object[] selectobj Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets); i…

HomeLink项目部署和发布的完整流程

由于Java项目的配置较为繁琐&#xff0c;长时间不使用可能会忘记&#xff0c;因此我特意总结了一下配置流程。 1.软件环境: myeclipse-10.7.1-offline-installer-windows(直接安装) apache-tomcat-7.0.65-windows-x64(Tomcat下载安装以及配置-CSDN博客) JDK(Myeclipse自带…

Python中的数据类型有四类八种如何理解?

在Python中&#xff0c;数据类型大致可以分为四大类&#xff0c;包含了八种基本的数据类型&#xff0c;这些分类有助于理解和使用Python进行编程。这四大类分别是&#xff1a; 数字类型 (Numeric Types): 整型 (int): 表示没有小数部分的整数&#xff0c;可以是正数、负数或零。…

MinIO+Docker从零搭建一个文件存储服务

本文&#xff0c;将带你使用 MinIO Docker 来从零搭建一个文件存储服务&#xff0c;并在 SpringBoot 项目中上传图片到 MinIO 中。 一.为什么要自己搭建&#xff1f; 对于个人来说&#xff0c;当然是攻击风险。第三方对象存储服务通常会收取费用&#xff0c;尤其随着数据量的…

科普 | Runes 预挖矿概念

作者&#xff1a;Jacky X/推&#xff1a;zxl2102492 关于 Runes 协议的前世今生&#xff0c;可以点击阅读这篇文章 &#x1f447; 《简述 Runes 协议、发展历程及最新的「公开铭刻」发行机制的拓展讨论》 什么是传统预挖矿概念 这轮比特币生态爆发之前&#xff0c;预挖矿&…

鸿蒙OS(ArkTS) 案例:【使用http网络请求框架加载验证码】

需求&#xff1a;加载验证码&#xff1b;1.下载验证码图像文件&#xff1b;2.获取header里面验证码ID 踩坑--踩坑--踩坑 根据文档使用 request.downloadFile 请求&#xff0c;官方示例: // pages/xxx.ets // 将网络资源文件下载到应用文件目录并读取一段内容 import common …