Leetcoder Day32| 贪心算法part05

news2024/11/15 9:36:21

 763.划分字母区间 

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

示例:

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

之前在回溯部分,有用回溯算法分割过字符串,但是属于暴力搜索,时间复杂度较高。

题目要求同一字母最多出现在一个片段中,并且划分尽可能多的片段,那么如何把同一个字母的都圈在同一个区间里呢?就是找到出现过的字母的最大终止位置。

可以分为如下两步:

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

class Solution {
    public List<Integer> partitionLabels(String s) {
        LinkedList<Integer> list=new LinkedList<>();
        int[] edge=new int[26]; 
        char[] chars=s.toCharArray(); //将一个字符串转换成一个字符(char)数组。
        //比如abecadf 那么edge[0]存储的就是a出现的次数
        for(int i=0;i<chars.length;i++){
            edge[chars[i]-'a']=i;  //统计每个字符出现的最后位置 ,按照字母的顺序存储
        }
        int idx=0, 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;
    }
}

56. 合并区间

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

示例 1:

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

示例 2:

  • 输入: intervals = [[1,4],[4,5]]
  • 输出: [[1,5]]
  • 解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。
  • 注意:输入类型已于2019年4月15日更改。 请重置默认代码定义以获取新方法签名。

依旧是重叠区间问题,先按照start排序,再进行重叠判断,本题相邻区域也算重叠,因此若intervals[i][0]<=intervals[i-1][1],则有重叠。若有重叠,则将区间的左右边界判断更新end使之成为两个区间的最远end,加入result数组,若不重合,更新start和end,直接加入原区间。

class Solution {
    public int[][] merge(int[][] intervals) {
        List<int[]> res=new LinkedList<>();
        Arrays.sort(intervals, (a,b)->Integer.compare(a[0], b[0]));
        int start=intervals[0][0];
        int end =intervals[0][1];
        for(int i=1;i<intervals.length;i++){
            if(intervals[i][0]>end){//不重叠
                res.add(new int[]{start, end});//将当前节点加入res
                start=intervals[i][0];  //更新start
                end=intervals[i][1];
            }else{
                end=Math.max(end, intervals[i][1]); //更新最大右边界
            }
        }
        res.add(new int[]{start, end});
        return res.toArray(new int[res.size()][]);
    }
}

这里要注意一个语法基础⚠️在链表list里面添加值,然后把list链表添加进res链表中,在做算法题的时候,如果使用res.add(list),输出打印为空,因此需要res.add(new LinkedList<Integer>(list))。同理,在这里如果想要给链表res添加新的数组,一定也要res.add(new int[]{start, end});

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

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

相关文章

【Leetcode每日一题】二分查找 - LCR 173. 点名(难度⭐)(24)

1. 题目解析 Leetcode题目链接&#xff1a;LCR 173. 点名 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 核心在于找到题目所给的连续数组中缺失的数字即可。 2.算法原理 在这个升序的数组中&#xff0c;我们发现&#xff1a; …

金融方案再获认可!持安获评2023年度金融行业优秀解决方案

近日&#xff0c;由网络安全产业资讯媒体安全419主办的《年度策划》2023年度优秀解决方案评选结果正式发布。零信任办公安全技术创新企业持安科技荣获“2023年度优秀解决方案-金融行业优秀解决方案”。 安全419是以内容报道服务于行业的垂直资讯媒体和第三方企业服务机构。11月…

【LeetCode-中等】209.长度最小的子数组-双指针/滑动窗口

力扣题目链接 1. 暴力解法 这道题的暴力解法是两层嵌套for循环&#xff0c;第一层循环从 i 0 开始遍历至数组末尾&#xff0c;第二层循环从 j i 开始遍历至找到总和大于等于 target 的连续子数组&#xff0c;并将该连续子数组的长度与之前找到的子数组长度相比较&#xff0…

腾讯:《智能科技 跨界相变——2024数字科技前沿应用趋势》

1月23日&#xff0c;腾讯发布了题为《智能科技 跨界相变——2024数字科技前沿应用趋势》的报告&#xff0c;报告从计算重塑、智能升维、沉浸交互、未来连接四个方面&#xff0c;对100多项未来技术和重点方向给出了趋势性判断。并表示我们正驶向一个由连接衍生交互、由计算催生智…

mysql服务治理

一、性能监控指标和解决方案 1.QPS 一台 MySQL 数据库&#xff0c;大致处理能力的极限是&#xff0c;每秒一万条左右的简单 SQL&#xff0c;这里的“简单 SQL”&#xff0c;指的是类似于主键查询这种不需要遍历很多条记录的 SQL。 根据服务器的配置高低&#xff0c;可能低端…

能让薪资翻3倍的软件测试面试经验

前言 面试真题&#xff1a;3 轮技术面 HR 面 面试总共经历四轮的面试&#xff0c;三轮的技术面试和一轮的 HR 面试&#xff0c;共耗时 5 个小时以上。 一面&#xff08;组长面&#xff09; 上家公司项目以及团队的规模是怎么样的&#xff1f; 你负责的项目整体的流程是怎么样的…

ETH开源PPO算法学习

前言 项目地址&#xff1a;https://github.com/leggedrobotics/rsl_rl 项目简介&#xff1a;快速简单的强化学习算法实现&#xff0c;设计为完全在 GPU 上运行。这段代码是 NVIDIA Isaac GYM 提供的 rl-pytorch 的进化版。 下载源码&#xff0c;查看目录&#xff0c;整个项目…

vue cesium加载点与定位到指定位置

vue cesium定位到指定位置 window.viewer.camera.flyTo({destination: Cesium.Cartesian3.fromDegrees(point.longDeg, point.latDeg, 6500000), orientation: {heading: 6.2079384332084935, roll: 0.00031509431759868534, pitch: -1.535}, duration: 3})vue cesium加载点 …

Talk|卡内基梅隆大学熊浩宇:Open-world Mobile Manipulation-开放世界机器人学习系统

本期为TechBeat人工智能社区第575期线上Talk。 北京时间2月29日(周四)20:00&#xff0c;卡内基梅隆大学研究生—熊浩宇的Talk已准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “Open-world Mobile Manipulation-开放世界机器人学习系统”&#xff0c;将向…

sora会是AGI的拐点么?

©作者|谢国斌 来源|神州问学 OpenAI近期发布的Sora是一个文本到视频的生成模型。这项技术可以根据用户输入的描述性提示生成视频&#xff0c;延伸现有视频的时间&#xff0c;以及从静态图像生成视频。Sora可以创建长达一分钟的高质量视频&#xff0c;展示出对用户提示的精…

经典语义分割(一)全卷积神经网络FCN

经典语义分割(一)全卷积神经网络FCN 1 FCN网络介绍 FCN&#xff08;Fully Convolutional Networks&#xff0c;全卷积网络&#xff09; 用于图像语义分割&#xff0c;它是首个端对端的针对像素级预测的全卷积网络&#xff0c;自从该网络提出后&#xff0c;就成为语义分割的基…

【论文阅读笔记】Explicit Visual Prompting for Low-Level Structure Segmentations

1.介绍 Explicit Visual Prompting for Low-Level Structure Segmentations 低级结构分割的显式视觉提示 2023年发表在IEEE CVPR Paper Code 2.摘要 检测图像中低级结构&#xff08;低层特征&#xff09;一般包括分割操纵部分、识别失焦像素、分离阴影区域和检测隐藏对象。虽…

前端面试知识点合集

原型和原型链 任何函数都可以作为构造函数。当该函数通过 new 关键字调用的时候&#xff0c;就称之为构造函数。 var Parent function(){}//定义一个函数&#xff0c;那它只是一个普通的函数&#xff0c;不能称它为构造函数var instance new Parent(); //这时这个Parent就不…

论文阅读_代码生成模型_CodeGeeX

英文名称: CodeGeeX: A Pre-Trained Model for Code Generation with Multilingual Evaluations on HumanEval-X 中文名称: CodeGeeX&#xff1a;一种用于代码生成的预训练模型&#xff0c;并在HumanEval-X上进行多语言评估 链接: https://arxiv.org/abs/2303.17568 代码: http…

【六袆 - MySQL】MySQL 5.5及更高版本中,InnoDB是新表的默认存储引擎;

InnoDB 这是一个MySQL组件&#xff0c;结合了高性能和事务处理能力&#xff0c;以确保可靠性、健壮性和并发访问。它体现了ACID设计哲学。它作为一个存储引擎存在&#xff0c;处理使用ENGINEINNODB子句创建的或修改的表。请参阅第14章“InnoDB存储引擎”以获取有关架构细节和管…

AOP案例(黑马学习笔记)

需求 需求&#xff1a;将案例中增、删、改相关接口的操作日志记录到数据库表中 ● 就是当访问部门管理和员工管理当中的增、删、改相关功能接口时&#xff0c;需要详细的操作日志&#xff0c;并保存在数据表中&#xff0c;便于后期数据追踪。 操作日志信息包含&#xff1a; ●…

本地复制文本无法在Ubuntu终端中粘贴问题

在公司&#xff0c;安装Ubuntu环境后无法粘贴。 查询并自己实践后&#xff0c;解决方法如下&#xff1a; 1. sudo apt-get autoremove open-vm-tools 2. sudo apt-get install open-vm-tools-desktop 3.重启虚拟机 又可以愉快的复制粘贴了

解析平面设计师的任务:4个要点带你全面了解!

平面设计师是整个市场相对稀缺但需求非常大的职业&#xff0c;许多设计师都是主要公司竞争的对象。平面设计在我们的日常生活中非常常见&#xff0c;涉及广告设计、标志设计、名片设计等领域。因此&#xff0c;本文将从四个方面详细介绍平面设计。 什么是平面设计 说到平面设…

低功耗的CMOS实时时钟/日历电路,内置报警和定时器功能采用 DIP8、 SOP8、 TSSOP8三种封装形式,应用于移动电话,便携仪器上——D8563

D8563是低功耗的CMOS实时时钟/日历电路,它提供一个可编程时钟输出&#xff0c;一个中断输出和掉电检测器&#xff0c;所有的地址和数据通过IC总线接口串行传递。最大总线速度为400Kbitss每次读写数据后&#xff0c;内嵌的字地址寄存器会自动产生增量。 主要特点&#xff1a; …

Semantic human matting

1.introduction 数据集包括&#xff0c;时尚模特数据集&#xff0c;超过18.8w张模特图&#xff0c;从中选出35311张图片&#xff0c;DIM数据集&#xff0c;仅包含人类的图像&#xff0c;202个前景图像&#xff0c;背景来自coco数据集和互联网&#xff0c;背景图不含人类&#x…