day36 贪心算法part5

news2024/11/24 8:02:39

435. 无重叠区间

中等
给定一个区间的集合 intervals ,其中 intervals[i] = [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。

气球问题稍加改动就可ac

在这里插入图片描述

一个交叉区间里,最终只能保留一个,其他的全部要去掉。所以要移除的区间最小数量就是总数减去交叉区间数。

在这里插入图片描述
在这里插入图片描述

// 左边界排序直接求要移走的区间个数
class Solution {
    public int eraseOverlapIntervals(int[][] intervals) {
        Arrays.sort(intervals, (a, b) -> Integer.compare(a[0], b[0]));

        int count = 0; // 注意是0,因为是求重叠区间数
        for (int i = 1; i < intervals.length; i++) {
            if (intervals[i][0] < intervals[i - 1][1]) { // 有重叠,第二个的左边界小于第一个的右边界
                intervals[i][1] = Math.min(intervals[i][1], intervals[i - 1][1]);
                count++; // 有重叠就得挪走一个
            } else { // 无重叠
                // 无重叠不用处理,这里的else可以删掉
            }
        }
        return count;
    }
}

763. 划分字母区间

中等
提示
给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。
注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s 。
返回一个表示每个字符串片段的长度的列表。

class Solution {
    public List<Integer> partitionLabels(String s) {
        List<Integer> result = new LinkedList<>();
        int hash[] = new int[26];
        char[] chars = s.toCharArray(); // 记住这个函数,挺有用的

        // 得到对应的哈希表(我称之为哈希表)
        for (int i = 0; i < chars.length; i++) {
            hash[chars[i] - 'a'] = i; 
        }
        int max = 0; // 记录在以前出现过的最大的字母的下标
        int last = 0; // 题目划分字符段是用个数确定的,所以得记住上次划分的边缘
        for (int i = 0; i < chars.length; i++) {
            max = Math.max(max, hash[chars[i] - 'a']); // 看看当前字母下标和以前记录的max谁更大
            if (max == i) {
                result.add(i + 1 - last);
                last = i + 1;
            }
        }
        return result;
    }
}

56. 合并区间

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

难点:找到重叠并不难,难在如何模拟合并。这个题想明白了也很简单,找到不重叠的区间就直接加到结果里,如果找到重叠的区间就记录这个重叠区间的左边界和右边界,把它当做一个区间来继续和下一个进行比较。

class Solution {
    public int[][] merge(int[][] intervals) {
        // 按左边界进行排序
        Arrays.sort(intervals, (a, b) -> Integer.compare(a[0], b[0]));
        int leftBound = intervals[0][0]; // 左边界
        int rightBound = intervals[0][1]; // 最大右边界
        List <int[]> result = new LinkedList<>();

        for (int i = 1; i < intervals.length; i++) {
            if (rightBound < intervals[i][0]) { // 不重叠, 本题 = 也是重叠
                // 不重叠就加到结果里
                result.add(new int[] {leftBound, rightBound});
                // 更新左右边界
                leftBound = intervals[i][0];
                rightBound = intervals[i][1];
            } else { // 重叠
                // 左边界不用更新,已经是最左边了
                // 更新右边界
                rightBound = Math.max(rightBound, intervals[i][1]);
            }
        }
        // 注意这个!把最后一组加进去
        result.add(new int[]{leftBound, rightBound});
        return result.toArray(new int[result.size()][]); // 记住这个语法!!!
    }
}

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

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

相关文章

android开发的基础,大厂程序员35岁后的职业出路在哪

为什么越来越多的年轻人感觉工作没有动力、职业发展没有希望&#xff0c;迷茫和中年危机等现象普遍发生&#xff1f; 人常说&#xff0c;安居才能乐业。 前些年&#xff0c;房价虽然也不低&#xff0c;但刚工作的年轻人&#xff0c;努力奋斗&#xff0c;攒上几年钱&#xff0c…

蓝桥杯练习系统(算法训练)ALGO-985 幸运的店家

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 炫炫开了一家商店&#xff0c;卖的货只有一个&#xff0c;XXX&#xff0c;XXX卖N元钱。有趣的是&#xff0c;世界上只有面值…

LeetCode刷题---填充每个节点的下一个右侧节点指针

官方题解:LeetCode官方题解 解题思想: 因为是一棵满二叉树&#xff0c;所以除了叶子节点外的其他节点都有两个子节点。 可以根据每一层来依次遍历 从根节点开始&#xff0c;根节点的左子节点的next节点就指向根节点的右子节点 因为根节点的next节点为NULL&#xff0c;开始从根…

扫地机器人

题目描述 小明公司的办公区有一条长长的走廊&#xff0c;由N个方格区域组成&#xff0c;如下图所示。 R r 走廊内部署了K台扫地机器人&#xff0c;其中第台在第A&#xff0c;个方格区域中。已知扫地机器人每分钟可以移动到左右相邻的方格中&#xff0c;并将该区域清扫干净。 请…

softmax和sigmoid的区别

sigmoid 公式&#xff1a; s i g m o i d ( x ) 1 1 e − x sigmoid(x) \frac{1}{1 e^{-x}} sigmoid(x)1e−x1​ 函数曲线如下&#xff1a; 导数公式&#xff1a; f ( x ) ′ e − x ( 1 e − x ) 2 f ( x ) ( 1 − f ( x ) ) f(x)\prime \frac{ e^{-x}}{(1 e^{-x})…

Day14:单元测试、Junit单元测试框架、反射、注解

单元测试 针对最小的功能单元&#xff08;方法&#xff09;进行正确性测试编写正规的单元测试框架传统的无法执行自动化测试&#xff0c;且无法得到测试报告 Junit单元测试框架 Junit的作用&#xff1a; 具体步骤 测试类取名&#xff1a;原类名Test&#xff08;大驼峰&#…

30m二级分类土地利用数据Arcgis预处理及获取

本篇以武汉市为例&#xff0c;主要介绍将土地利用数据转换成武汉市内各区土地利用详情的过程以及分区统计每个区内各地类面积情况&#xff0c;后面还有制作过程中遇到的面积制表后数据过小的解决方法以及一些相关的知识点&#xff1a; 示例数据下载链接&#xff1a;数据下载链…

Javaweb之SpringBootWeb案例之自动配置案例的自定义starter测试的详细解析

3.2.4.3 自定义starter测试 阿里云OSS的starter我们刚才已经定义好了&#xff0c;接下来我们就来做一个测试。 今天的课程资料当中&#xff0c;提供了一个自定义starter的测试工程。我们直接打开文件夹&#xff0c;里面有一个测试工程。测试工程就是springboot-autoconfigurat…

数据结构之顺序表及其实现!

目录 ​编辑 1. 顺序表的概念及结构 2. 接口的实现 2.1 顺序表的初始化 2.2 检查顺序表容量是否已满 2.3 顺序表的尾插 ​编辑 2.4 顺序表的尾删 2.5 顺序表的头插 2.6 顺序表的头删 2.7 顺序表在pos位置插入 2.8 顺序表在pos位置删除 2.9 顺序表的查找 2.10 顺…

Long-term Correlation Tracking LCT目标跟踪算法原理详解(个人学习笔记)

目录 1. 算法总览2. 算法详解2.1. 基础相关滤波跟踪2.2. 各模块详解2.2.1. 相关跟踪2.2.2. 在线检测器 3. 算法实现3.1. 算法步骤3.2. 实现细节 4. 相关讨论&总结 1. 算法总览 LCT的总体流程如上图所示&#xff0c;其思想为&#xff1a;将长时跟踪&#xff08;long-term tr…

AI发展历程和常用框架

AI发展历程 近几年的人工智能发展历程可以大致划分为以下几个阶段&#xff1a; 数据驱动的突破&#xff08;2012-2015年&#xff09;&#xff1a;这一时期&#xff0c;随着大数据的兴起和计算能力的提升&#xff0c;深度学习技术开始取得突破。以AlexNet在2012年ImageNet图像…

基于Nandflash的Bootloader的设计与实现

摘要&#xff1a;Bootloader是系统上电或复位后首先运行的一段代码&#xff0c;是连接操作系统和硬件的桥梁&#xff0c;负责初始化硬件和引导操作系统等。目前已有很多通用的Bootloader&#xff0c;但是如何根据特定的嵌入式平台&#xff0c;移植自己的引导程序是一个重点和难…

Java电梯模拟升级版

Java电梯模拟升级版 文章目录 Java电梯模拟升级版前言一、UML类图二、代码三、测试 前言 在上一版的基础上进行升级&#xff0c;楼层采用享元模式进行升级&#xff0c;并对楼层对象进一步抽象 一、UML类图 二、代码 电梯调度器抽象类 package cn.xx.evevator;import java.ut…

如何选择适合本产线的数据采集平台?

工业数据采集是指从工业现场的传感器、仪器仪表、设备等数据源中采集数据&#xff0c;并将其传输到计算机系统或云端进行处理、分析和存储的过程。数据采集平台可以将生产过程中的各种数据进行分析和处理&#xff0c;从而实现智能化生产&#xff0c;提高生产效率和产品质量。 …

Jmeter之Ramp-up Period(in seconds)

1、Ramp-up Period概念 &#xff08;in seconds&#xff09;–并发用户启动周期&#xff0c;告知JMeter 要在多长时间内启动全部Vuser用户。 2、为什么需要有“ramp-up period”&#xff0c;立即启动所有的并发用户数不是更好&#xff1f; 对于绝大多数的网址或应用&#xf…

18.网络游戏逆向分析与漏洞攻防-网络通信数据包分析工具-数据分析工具数据与消息配置的实现

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 上一个内容&#xff1a;17.数据分析工具配置功能的实现 码云地址&#xff08;master 分支&#xff09;&#xff1a;https://gitee.com/dye_your_fingers/titan…

数据库搭建11.2

数据库之搭建 1、rpm -qa|grep 服务名称 案例&#xff1a;rpm -qa|grep mysql 2、将所有msyql的包删除干净 删除方法&#xff1a; &#xff08;1&#xff09;yum remove mysql * 删除linux中的数据库 &#xff08;2&#xff09;yum erase 包名 &#xff0…

微前端之什么是微前端

什么是微前端 微前端分类 基于路由的微前端&#xff1a;组件化微前端&#xff1a;iframe嵌入式微前端&#xff1a; 优点缺点 动态加载/懒加载微前端&#xff1a;微应用容器化方案&#xff1a; 微前端解决方案 single-spa阿里巴巴 Cloud Alfaiframe 方案Web ComponentsModule Fe…

蓝桥杯-Set

目录 HashSet类常用方法 1 add(Object obj)方法 2 size() 方法 3 remove(Object obj)方法 4 contains()方法 5 clear() 方法 例题实战 set 一个不允许出现重复的元素&#xff0c;并且无序的集合&#xff0c;主要有HashSet实现类。 在判断重复元素的时候&#xff0c;Set集…

springcloud:3.5测试慢调用熔断降级

服务提供者【test-provider8001】 Openfeign远程调用服务提供者搭建 文章地址http://t.csdnimg.cn/06iz8 相关接口 测试远程调用&#xff1a;http://localhost:8001/payment/index 服务消费者【test-consumer-resilience4j8004】 Openfeign远程调用消费者搭建 文章地址http://t…