代码随想录第36天|435. 无重叠区间 (需要二刷),763.划分字母区间,56. 合并区间

news2025/1/18 3:23:40

435. 无重叠区间 (需要二刷)

本题其实和452.用最少数量的箭引爆气球 (opens new window)非常像,弓箭的数量就相当于是非交叉区间的数量,只要把弓箭那道题目代码里射爆气球的判断条件加个等号(认为[0,1][1,2]不是相邻区间),然后用总区间数减去弓箭数量 就是要移除的区间数量了。

我们先根据每个小数组的第一个元素进行左边界排序,左排序我们可以直接求重叠的区间,count为记录重叠区间数。

class Solution {
    public int eraseOverlapIntervals(int[][] intervals) {
        int count=0;
        Arrays.sort(intervals,(a,b)->{
            return a[0]-b[0];//按照每个小数组的第一位元素升序
        });
        //左边界排序可不可以呢?也是可以的,只不过 左边界排序我们就是直接求 重叠的区间,count为记录重叠区间数。
        for(int i=0;i<intervals.length-1;i++){
            if(intervals[i][1]>intervals[i+1][0]){//有重叠情况
                intervals[i+1][1]=Math.min(intervals[i+1][1],intervals[i][1]);
                count++;
            }
        }
        return count;
    }
}

763.划分字母区间

思路不难,但是难以想到,所以一般做过一遍才能有的思路

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

步骤:

1.我们首先要找出s中每个字母最后出现的位置(下标),每个字母的最远位置记录在edge数组中

如上面图中得到的edge:[8,5,7,14,15,11....]

2.分割字符串s,我们遍历字符串s,

下面这里很巧妙,因为我们字符串s中遍历的时候字符混合在一起,相邻间就可能是不同的字符,那么我们要找到这些字符中哪一个字符出现的位置最远,就需要不断更新idx

 idx=Math.max(idx,edge[s.charAt(i)-'a']);//

代码实现 

class Solution {
    public List<Integer> partitionLabels(String s) {
        //同一字母最多出现在一个片段中。划分成尽可能多的片段
       // 返回一个表示每个字符串片段的长度的列表。
       List<Integer> list=new LinkedList<>();
       //记录每个字母出现的最远位置
       int[] edge=new int[26];
       for(int i=0;i<s.length();i++){
           edge[s.charAt(i)-'a']=i;//会不断更新edge对应字母的值,
       }
       int idx=0;
       int last=-1;
       //在上面已经得到字母出现的最远位置了,下面可以开始分割字符串s
       for(int i=0;i<s.length();i++){
           idx=Math.max(idx,edge[s.charAt(i)-'a']);//
           if(i==idx){
               list.add(idx-last);
               last=i;//更新最新的位置
           }
       }
       return list;



    }
}

56. 合并区间

这次是二刷了,比之前清楚了许多,思路也好理解

首先对数组按照第一个元素进行升序排列,定义一个区间[start,rightmostBound],初始化:

        int start=intervals[0][0];
        int rightmostBound=intervals[0][1];

然后开始遍历数组intervals,判断当前遍历的数组与区间有没有重复的范围,有重复则要合并区间,没有重复范围就需要将其添加到结果列表res中,同时更新区间范围

 代码实现

class Solution {
    public int[][] merge(int[][] intervals) {
        // 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。
        List<int[]> res=new LinkedList<>();
        Arrays.sort(intervals,(a,b)->{
            return a[0]-b[0];//升序排序
        });
        int start=intervals[0][0];
        int rightmostBound=intervals[0][1];
        for(int i=1;i<intervals.length;i++){
            if(intervals[i][0]>rightmostBound){
                //说明没有重叠
                res.add(new int[]{start,rightmostBound});
                //更新start和最大右边界
                start=intervals[i][0];
                rightmostBound=intervals[i][1];
            }
            else{//intervals[i][0]<=rightmostBound
                //说明当前遍历到的intervals[i]和[start,rightmostBound]有重叠的部分
                //更新最大右边界
                rightmostBound=Math.max(rightmostBound,intervals[i][1]);


            }
        }
        res.add(new int[]{start,rightmostBound});
        return res.toArray(new int[res.size()][]);


    }
}






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

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

相关文章

公司电脑文件自动加密——「天锐绿盾」

「天锐绿盾」是一种文件自动加密工具&#xff0c;可以与天锐绿盾应用服务器安全接入系统结合使用&#xff0c;实现只有安装了加密客户端的电脑才能访问应用服务器。此外&#xff0c;该工具还可以指定办公人员在对某些类型的文件进行新建、编辑时&#xff0c;自动备份到天锐绿盾…

没有使用sniffer dongle在windows抓包蓝牙方法分享

网上很多文章都是介绍买一个sniffer dongle来抓蓝牙数据,嫌麻烦又费钱,目前找到一个好方法,不需要sniffer就可以抓蓝牙数据过程,现分享如下: (1)在我资源附件找到相关安装包或者查看如下链接 https://learn.microsoft.com/zh-cn/windows-hardware/drivers/bluetooth/testing-bt…

2023开学礼《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书海口经济学院图书馆

2023开学礼《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书海口经济学院图书馆

通过Docker Compose安装MQTT

一、文件和目录说明 1、MQTT安装时的文件和目录 EMQX 安装完成后会创建一些目录用来存放运行文件和配置文件&#xff0c;存储数据以及记录日志。 不同安装方式得到的文件和目录位置有所不同&#xff0c;具体如下&#xff1a; 注意&#xff1a; 压缩包解压安装时&#xff0c;目…

第 3 章 栈和队列(顺序栈,算法 3.3,使用栈解答迷宫问题)

1. 背景说明 若迷宫 maze 中存在从入口 start 到出口 end 的通道&#xff0c;则求得一条存放在栈中(从栈底到栈顶)&#xff0c;并返回 TRUE&#xff1b;否则返回 FALSE&#xff0c;注意&#xff0c;该解并非最优解&#xff0c; 最优解需要求得最短路径且可能并非一条。 迷宫…

Auto DevOps介绍

1 Preface/Foreword 随着国际化&#xff0c;信息化&#xff0c;当今是一个VUCA时代。 VUCA&#xff1a;Volatile &#xff08;易变的&#xff09;&#xff0c;Uncertain &#xff08;不确定的&#xff09;&#xff0c;Complicated &#xff08;复杂的&#xff09;&#xff0c…

类ChatGPT大模型LLaMA及其微调模型

1.LLaMA LLaMA的模型架构:RMSNorm/SwiGLU/RoPE/Transfor mer/1-1.4T tokens 1.1对transformer子层的输入归一化 对每个transformer子层的输入使用RMSNorm进行归一化&#xff0c;计算如下&#xff1a; 1.2使用SwiGLU替换ReLU 【Relu激活函数】Relu(x) max(0,x) 。 【GLU激…

nginx-反向代理缓存

反向代理缓存相当于自动化动静分离。 将上游服务器的资源缓存到nginx本地&#xff0c;当下次再有相同的资源请求时&#xff0c;直接讲nginx缓存的资源返回给客户端。 本地缓存资源有一个过期时间&#xff0c;当超过过期时间&#xff0c;则重新向上游服务器重新请求获取资源。…

书籍推荐-1 Python编程:从入门到实践(第2版)

Python编程&#xff1a;从入门到实践&#xff08;第2版&#xff09; 书籍背景 作者介绍 埃里克马瑟斯&#xff08;Eric Matthes&#xff09;&#xff0c;高中科学和数学老师&#xff0c;现居住在美国阿拉斯加&#xff0c;在当地讲授Python入门课程。他从5岁开始就一直在编写程序…

mysql:[Some non-transactional changed tables couldn‘t be rolled back]不支持事务

1. mysql创建表时默认引擎MyIsam&#xff0c;因此不支持事务的操作&#xff1b; 2. 修改mysql的默认引擎&#xff0c;可以使用show engine命令查看支持的引擎&#xff1a; 【my.conf详情说明】my.cnf配置文件注释详解_xiaolin01999的博客-CSDN博客 3. 原来使用MyIsam创建的表…

python: excel 换行符(_x000D_)

data4 dataframe1.loc[4:34] for idx, datavalue in data4.iterrows():#strnumCommon.Utils.Utils.getAnnualLeave(data)print("[{}]: {}".format(idx, datavalue))slistdatavalue.tolist()hbllBLL.EmpLoyeeHolidaysGet.EmpLoyeeHolidaysGet() #病假4小時_x000D_事假…

无人机集群路径规划MATLAB:孔雀优化算法POA求解无人机集群三维路径规划

一、无人机模型简介 单个无人机三维路径规划问题及其建模_IT猿手的博客-CSDN博客 二、孔雀优化算法POA介绍 孔雀优化算法( Peafowl Optimization Algorithm, POA), 是由 Jingbo Wang 等于2022 年提出的一种群体智能优化算法。其灵感来源于孔雀的群体行为。 智能优化算法&am…

PlantUML入门教程:画时序图

软件工程中会用到各种UML图&#xff0c;例如用例图、时序图等。那我们能不能像写代码一样去画图呢&#xff1f; 今天推荐一款软件工程师的作图利器--PlantUML&#xff0c;它能让你用写代码的方式快速画出UML图。 一、什么是PlantUML&#xff1f; PlantUML是一个允许你快速作出…

移动零00

题目链接 移动零 题目描述 注意点 将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序必须在不复制数组的情况下原地对数组进行操作 解答思路 采用双指针的思路&#xff0c;左指针指向已移动零的数组的尾部&#xff0c;右指针指向为移动零的数组的头部&…

深度学习推荐系统(五)DeepCrossing模型及其在Criteo数据集上的应用

深度学习推荐系统(五)Deep&Crossing模型及其在Criteo数据集上的应用 在2016年&#xff0c; 随着微软的Deep Crossing&#xff0c; 谷歌的Wide&Deep以及FNN、PNN等一大批优秀的深度学习模型被提出&#xff0c; 推荐系统全面进入了深度学习时代&#xff0c; 时至今日&am…

Python实现字符串模糊匹配

在一个字符串中&#xff0c;有时需对其中某些内容进行模糊匹配以实现条件的判定&#xff0c;如在“你好&#xff0c;hello,world”中判断是否含有“llo”。Python中通过re.search()方法实现&#xff0c;特别地&#xff0c;对于首位起始的内容匹配&#xff0c;也可通过re.match(…

Apolo学习

安装&#xff08;java1.8 mysql 5.6.5以上&#xff09; 下载quickStart的包&#xff0c;早apollo下执行两个sql。如果不执行这两个sql&#xff0c;apollo是执行不起来的。会有两个表来记录apollo的执行情况。其中一个表叫apolloportaldb 在apollo目录下会有执行的包。.sh是…

stm32f1xx单片机拦截中断源代码

这个是实现后的效果&#xff0c;可以看到已经没有中断的效果了 这个是拦截前的效果可以看到电平是在变化的 实现原理非常简单&#xff1a;一句话搞定&#xff1a; if(TIM2->CNTTIM2->ARR-5)TIM2->CNT-5; 以下是完整的代码&#xff1a;是用来补充说明和筹字数的 /* …

山西电力市场日前价格预测【2023-09-04】

日前价格预测 预测明日&#xff08;2023-09-04&#xff09;山西电力市场全天平均日前电价为305.57元/MWh。其中&#xff0c;最高日前电价为349.83元/MWh&#xff0c;预计出现在19: 15。最低日前电价为226.28元/MWh&#xff0c;预计出现在13: 30。 价差方向预测 1&#xff1a; 实…