4月26日划分字母区间+合并区间

devtools/2024/10/21 3:06:40/

736.划分字母区间

给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。

注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s 。

返回一个表示每个字符串片段的长度的列表。

提示:

  • 1 <= s.length <= 500
  • s 仅由小写英文字母组成

思路

这题我自己没想出来,刚开始想的是遍历每个字母,遍历到了就加进哈希表,然后从后往前找第一个重复字母,然后再找下一个字母,但是始终没想明白怎么判断结束。

题解的思路是定义一个end来存储当前区间的结束位置,每次遍历判断end后面是否有和前面字母重复的,有的话就更新end,如果遍历到end就把当前区间长度加入答案。

还用到了一个技巧就是定义一个存放26个字母最后出现位置的数组,然后从前往后遍历数组,更新每个字母最后出现的位置,这样之后我们在遍历时就不需要再去从后往前找第一个重复字母。

代码

    class Solution {public List<Integer> partitionLabels(String s) {List<Integer> ans=new ArrayList<>();int[] last=new int[26];for(int i=0;i<s.length();i++){last[s.charAt(i)-'a']=i;}int start=0,end=0;for(int i=0;i<s.length();i++){end=Math.max(end,last[s.charAt(i)-'a']);if(i==end){ans.add(end-start+1);start=end+1;}}     return ans;}}

56.合并区间

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。

思路

看到这种区间类的题目我的第一反应是先排序,这里不用管相同的时候第二个元素怎么排,反正肯定会合并为一个区间。然后遍历,记录start和end作为合并的区间,首先初始化为[0][0]和[0][1],然后往后遍历,如果遍历到的元素的start小于等于当前的end,则更新end为该元素end与当前end之间较大值,如果大于则将当前start和end加入答案,并更新start和end为该元素的。若已经遍历到最后一个元素,则在处理完之后将start和end再加入答案。

代码

class Solution {public int[][] merge(int[][] intervals) {if(intervals.length==1){return intervals;}List<int[]> ans=new ArrayList<int[]>();Arrays.sort(intervals, new Comparator<int[]>() {@Overridepublic int compare(int[] o1, int[] o2) {return o1[0]-o2[0];}});int start=intervals[0][0],end=intervals[0][1];for(int i=1;i<intervals.length;i++){if(intervals[i][0]<=end){end=Math.max(end,intervals[i][1]);}else  {ans.add(new int[]{start,end});start=intervals[i][0];end=intervals[i][1];}if(i==intervals.length-1){ans.add(new int[]{start,end});}}return ans.toArray(new int[ans.size()][]);}}

总结

最近几天的刷题有点刷上瘾了,这种自己独立思考写出代码然后ac的感觉确实很棒,后天就要进入动态规划了,希望不被虐死吧


http://www.ppmy.cn/devtools/19219.html

相关文章

详解汽车充电桩主板的硬件设计与软件系统

随着电动汽车时代的到来&#xff0c;充电桩逐渐成为城市新地标。而在每一个充电桩的核心&#xff0c;隐藏着一颗强大的“心脏”——充电桩主板。 充电桩主板是充电桩的核心部件&#xff0c;决定着充电桩的充电效率、安全和用户体验。今天&#xff0c;我们将深入探索汽车充电桩主…

推荐一个stable-diffusion-webui的升级项目stable-diffusion-webui-forge

如果你习惯本地部署stable-diffusion-webui的话&#xff0c;也可以考虑部署一下stable-diffusion-webui-forge。个人试验了一下&#xff0c;在mac上比早期的sd安装容易了很多。基本一个命令就搞定了&#xff0c;而且forge在cmd不需要加入太多的参数。 github地址 下面是官方的…

【嵌入式AI开发】轻量级卷积神经网络MobileNet网络实战——文末完整源码工程文件

前言:本文介绍轻量级卷积神经网络MobileNet网络实战,包含MobileNetV1、MobileNetV2、ResNet50三个预训练模型可供选择。 实现:1.预训练MobileNet图像分类,2.调用摄像头实时MobileNet图像分类,3.MobileNet视频图像分类。 MobileNet网络理论详解:【嵌入式AI开发】轻量级卷…

又重新搭了个个人博客

哈喽大家好&#xff0c;我是咸鱼。 前段时间看到一个学弟写了篇用 Hexo 搭建博客的教程&#xff0c;心中沉寂已久的激情重新被点燃起来。&#xff08;以前搞过一个个人网站&#xff0c;但是因为种种原因最后不了了之&#xff09; 于是花了一天时间参考教程搭了个博客网站&…

ElasticSearch语句中must,must_not,should 组合关系

前言&#xff1a; 在实际应用中&#xff0c;发现当bool中同时使用must和should 没有达到想要的想过&#xff0c;而是只展示了must中的命中数据&#xff0c;所以打算探究一下bool中 三种逻辑关系的组合。 上述查询语句只展示了must的结果&#xff0c;没有should中的结果&#…

JavaScript基础(一)

小白学先送两个网站: https://www.runoob.com/js/js-tutorial.html https://www.w3school.com.cn/js/index.asp 无论现在学习还是以后从事开发一定要学会自己查文档看&#xff0c;尤其是你做一线开发学新技术&#xff0c;你只能上人家官网看。 为什么要学习JavaScript JavaS…

从C语言到C++过渡篇(快速入门C++)

目录 引言 命名空间 C 的输入输出&#xff08;cout & cin&#xff09; 输出 cout 输入 cin 缺省参数 函数重载 知识要点讲解 函数重载底层 引用& 内联函数 auto & nullptr 结语 引言 很多同学从C语言到C的转变不知从何下手&#xff0c;今天这篇文章主…

《数字化决策》第三版的启示

目录 一、《数字化决策》读后感 二、《数字化决策》给人的启示 三、思考题 一、《数字化决策》读后感 随着科技的飞速发展&#xff0c;数字化已经成为商业领域的核心力量。在这样的背景下&#xff0c;《数字化决策》第三版为我们提供了宝贵的认知提升&#xff0c;帮助我们更…