算法打卡day31|贪心算法篇05|Leetcode 435. 无重叠区间、763.划分字母区间、56. 合并区间

 算法题

Leetcode 435. 无重叠区间

题目链接:435. 无重叠区间

 大佬视频讲解:无重叠区间视频讲解

 个人思路

和昨日的最少箭扎气球有些类似,先按照右边界排序,从左向右记录非交叉区间的个数。最后用区间总数减去非交叉区间的个数就是需要移除的区间个数了

解法
贪心法

首先区间1,2,3,4,5,6都按照右边界排好序

取 区间1 右边界a和 区间2左边界b,如果区间a>b时,说明区间交叉,需要删除一个重叠区间,重新找右边界,取区间a和b中的最小右边界,继续往后遍历。若a<b,说明区间不交叉,数量加1.

总共区间个数为5,减去非交叉区间的个数3,移除区间的最小数量就是2。

class Solution {public int eraseOverlapIntervals(int[][] intervals) {Arrays.sort(intervals, (a,b)-> {//按右边界排序return Integer.compare(a[0],b[0]);});int count = 1;for(int i = 1;i < intervals.length;i++){if(intervals[i][0] < intervals[i-1][1]){intervals[i][1] = Math.min(intervals[i - 1][1], intervals[i][1]);//选择小的右边continue;}else{count++;//非交叉区间数加1}    }return intervals.length - count;//需要删除的区间数}
}

时间复杂度:O(n logN);(排序数组)

空间复杂度:O( logN);(java所使用的内置函数用的是快速排序需要 logN 的空间)


 Leetcode  763.划分字母区间

题目链接:763.划分字母区间

大佬视频讲解:划分字母区间视频讲解

个人思路

这道题有些技巧,但这个技巧我不知道...

解法
贪心法

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

所以步骤为

  1. 统计每一个字符最后出现的位置
  2. 从头遍历字符,并更新字符的最远出现下标,如果找到字符最远出现位置下标和当前下标相等了,则找到了分割点

class Solution {public List<Integer> partitionLabels(String S) {List<Integer> list = new LinkedList<>();int[] edge = new int[26];//边界数组char[] chars = S.toCharArray();//字符串转字符串数组for (int i = 0; i < chars.length; i++) {//更新字母的最远边界edge[chars[i] - 'a'] = i;}int idx = 0;int last = -1;for (int i = 0; i < chars.length; i++) {//遍历数组idx = Math.max(idx,edge[chars[i] - 'a']);if (i == idx) {//找到最远边界后分割,收集字符串长度list.add(i - last);last = i;}}return list;}
}

时间复杂度:O(n );(遍历数组)

空间复杂度:O(1);(hash数组是固定大小)


 Leetcode  56. 合并区间

题目链接:56. 合并区间

大佬视频讲解:合并区间视频讲解

 个人思路

这道题和无重叠区间,最少箭射气球 ,都是判断区间重叠。区别就是判断区间重叠后的逻辑,这道题是判断区间重叠后要进行区间合并,因此还是贪心先排序再处理

解法
贪心法

先拿题目例子画个图 intervals = [[1,3],[2,6],[8,10],[15,18]]

先按照左边界从小到大排序,然后如果 intervals[i][0] <= intervals[i - 1][1] 即intervals[i]的左边界 <= intervals[i - 1]的右边界,则一定有重叠(本题相邻区间也算重爹,所以是<=)

将重叠区间合并,合并后取最小左边界和最大右边界,作为一个新的区间,加入到result数组。如果没有合并就把原区间加入到result数组


class Solution {public int[][] merge(int[][] intervals) {List<int[]> res = new LinkedList<>();Arrays.sort(intervals, (x, y) -> Integer.compare(x[0], y[0]));//按照左边界排序int start = intervals[0][0];//最小左边界int rightmost= intervals[0][1];//最大右边界for (int i = 1; i < intervals.length; i++) {//如果左边界大于最大右边界if (intervals[i][0] > rightmost) {res.add(new int[]{start, rightmost});//加入区间start = intervals[i][0];//更新startrightmost= intervals[i][1];} else {rightmost= Math.max(rightmost, intervals[i][1]);//更新最大右边界}}res.add(new int[]{start, rightmost});return res.toArray(new int[res.size()][]);}
}

时间复杂度:O(n logN);(排序数组)

空间复杂度:O( logN);(java所使用的内置函数用的是快速排序需要 logN 的空间)


 以上是个人的思考反思与总结,若只想根据系列题刷,参考卡哥的网址代码随想录算法官网

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

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

相关文章

VUE3 之 HOOKS公共方法封装(TS)

场景&#xff1a;在项目开发过程中大概率会出现复用性方法&#xff0c;故为了节省代码量对公共方法进行抽象提取&#xff0c;将其封装为公共方法&#xff0c;以便于在不同组件中快速使用。 举例分页器方法提取&#xff1a; src下新建hooks文件夹&#xff0c;新增ts文件&#x…

ubuntu22.04,放弃ibus,改用fcitx5

ubuntu22.04,放弃ibus,改用fcitx5 放弃ibus原因&#xff1a; 切换到中文输入法时&#xff0c;总是将选中的文字 删除了 &#xff0c;也有时候莫名其妙会删除文字在中文输入法下&#xff0c;光标总是没有感觉用久了&#xff0c; 切换到中文输入法会停留在切换界面 至少3秒在浏…

每日一篇 3.30

preview:预览 release the feature&#xff1a;发布功能 convincing human voice&#xff1a;令人信服的人声 raising the specter of deepfake risks:引发了深度造假风险的担忧 sharing early demos&#xff1a;分享早期演示 a small-scale &#xff1a;小规模 rollout of…

基于Web的社区医院管理服务系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW&#xff0c;文末可获取本项目的所有资料。 推荐阅读100套最新项目持续更新中..... 2024年计算机毕业论文&#xff08;设计&#xff09;学生选题参考合集推荐收藏&#xff08;包含Springboot、jsp、ssmvue等技术项目合集&#xff09; 1. 系统功能…

wordpress插件,免费的wordpress插件

WordPress作为世界上最受欢迎的内容管理系统之一&#xff0c;拥有庞大的插件生态系统&#xff0c;为用户提供了丰富的功能扩展。在内容创作和SEO优化方面&#xff0c;有一类特殊的插件是自动生成原创文章并自动发布到WordPress站点的工具。这些插件能够帮助用户节省时间和精力&…

[幻灯片]软件需求设计方法学全程实例剖析-03-业务用例图和业务序列图

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 pdf已上传至本号的CSDN资源&#xff0c;或到以下地址下载&#xff1a; http://umlchina.com/training/umlchina_03_bm.pdf

ubuntu环境下安装perf工具

检查当前环境内核的版本&#xff0c;执行如下命令&#xff1a; uname -a输出信息如下&#xff1a; Linux jackie-ubuntu 5.4.0-26-generic #30-Ubuntu SMP Mon Apr 20 16:58:30 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux安装perf工具&#xff0c;执行如下命令&#xff1a; s…

开源模型应用落地-baichuan2模型小试-入门篇(三)

一、前言 相信您已经学会了如何在Windows环境下以最低成本、无需GPU的情况下运行baichuan2大模型。现在,让我们进一步探索如何在Linux环境下,并且拥有GPU的情况下运行baichuan2大模型,以提升性能和效率。 二、术语 2.1. CentOS CentOS是一种基于Linux的自由开源操作…

Kubernetes入门:构建和管理容器化应用的强大工具

引言 在当今快速发展的科技领域中&#xff0c;容器化技术已经成为构建和管理应用程序的重要工具。随着应用程序规模的增长和复杂性的提高&#xff0c;传统的部署和管理方法已经无法满足日益增长的需求。因此&#xff0c;容器化技术的出现为软件开发和运维带来了全新的解决方案…

微服务demo(四)nacosfeigngateway

一、gateway使用&#xff1a; 1、集成方法 1.1、pom依赖&#xff1a; 建议&#xff1a;gateway模块的pom不要去继承父工程的pom&#xff0c;父工程的pom依赖太多&#xff0c;极大可能会导致运行报错&#xff0c;新建gateway子工程后&#xff0c;pom父类就采用默认的spring-b…

OSPF之单区域配置

文章目录 单区域配置项目背景项目分析拓扑图配置思路基础配置命令查看路由器接口IP地址信息OSPF配置 测试PC1与PC2互通查看OSPF邻居表修改OSPF路由器的router-id完美的OSPF配置命令写法常用查询命令 单区域配置 项目背景 企业内部存在多个部门&#xff0c;分别属于不同的网段…

揭秘谷歌Gemini Pro 1.5:如何免费体验处理超长对话的AI模型?

最近Google发布大模型API&#xff0c;让人有点想哭的那种。 他们发布了Gemini Pro&#xff0c;这个东西的免费key每分钟能调用60次&#xff01; 想想看&#xff0c;这速度&#xff0c;比GPT-3.5以前的免费key快了30倍不止。 而且&#xff0c;更厉害的是&#xff0c;即使是Ge…

Linux log of erros

I) Linux command 1.1 to give the value, no need space after equality operator yes: num2“W3Cschool” no: num2 “W3Cschool” 1.2 true and false in Linux, which is contrary with C language In Linux: 0 true 1 false At C: 0 false 1 true 1.3 II) Linux Sh…

Redisson源码研究

Redisson源码研究 主要分析RedissonLock Override public boolean tryLock(long waitTime/** 等待时间**/, long leaseTime/** TTL时间 **/, TimeUnit unit/** 时间单位 **/) throws InterruptedException {long time unit.toMillis(waitTime);long current System.current…

vue+elementUI搭建动态表头的表格

前提&#xff1a;以下代码是vue2项目结合elementUi完成的 数据结构 后端传来的数据是两个list&#xff0c;一个表头的list&#xff0c;一个表格内容的list // 表头 headTableAtts: [{ columnLabel: 姓名, columnName: name },{ columnLabel: 年龄, columnName: age },{ colu…

【深耕 Python】Data Science with Python 数据科学(2)jupyter-lab和numpy数组

关于数据科学环境的建立&#xff0c;可以参考我的博客&#xff1a;【深耕 Python】Data Science with Python 数据科学&#xff08;1&#xff09;环境搭建 Jupyter代码片段1&#xff1a;简单数组的定义和排序 import numpy as np np.array([1, 2, 3]) a np.array([9, 6, 2, …

2549. 统计桌面上的不同数字

2549. 统计桌面上的不同数字 题目链接&#xff1a;2549. 统计桌面上的不同数字 代码如下&#xff1a; class Solution { public://参考&#xff1a;https://leetcode.cn/problems/count-distinct-numbers-on-board/solutions/2080589/shu-xue-o1-jie-by-endlesscheng-hucn// …

堆和栈的空间差异

先来一段这样的代码&#xff1a; #include <stdio.h> //堆和栈的差异 char* print_stack(){char c[100]"hhhhhhhhhhhhhhhhh";//这里c算是一个指针puts(c);char *p;pc;return p; } int main() {char *p;p print_stack();puts(p);return 0; } 执行之后的结果&…

中国象棋AI在线对弈游戏源码

源码介绍 这是一款html5小游戏&#xff0c;主要功能在于js&#xff0c;带一套皮肤、内置ai算法&#xff0c;有能力的可以自行修改。 源码截图 下载地址 链接&#xff1a;https://pan.baidu.com/s/1fYp1HWsd91nJOdX1M8RFtQ?pwdh2iz 提取码&#xff1a;h2iz

C#——系统学习(LINQ)

C#中的LINQ (Language Integrated Query) LINQ&#xff08;Language Integrated Query&#xff09;是C#中一项强大的功能&#xff0c;它将查询功能无缝集成到C#语言中&#xff0c;使得开发者能够以一致且简洁的方式处理各种数据源&#xff0c;如内存中的集合、数据库、XML文档…