代码随想录刷题day30丨452. 用最少数量的箭引爆气球, 435. 无重叠区间,763.划分字母区间

news2024/11/24 21:08:24

代码随想录刷题day30丨452. 用最少数量的箭引爆气球, 435. 无重叠区间,763.划分字母区间

1.题目

1.1用最少数量的箭引爆气球

  • 题目链接:452. 用最少数量的箭引爆气球 - 力扣(LeetCode)

    在这里插入图片描述

  • 视频讲解:贪心算法,判断重叠区间问题 | LeetCode:452.用最少数量的箭引爆气球_哔哩哔哩_bilibili

  • 文档讲解:https://programmercarl.com/0452.%E7%94%A8%E6%9C%80%E5%B0%91%E6%95%B0%E9%87%8F%E7%9A%84%E7%AE%AD%E5%BC%95%E7%88%86%E6%B0%94%E7%90%83.html

  • 解题思路:贪心

    • 为了让气球尽可能的重叠,需要对数组按起始位置进行排序

    • 如果气球重叠了,重叠气球中右边边界的最小值 之前的区间一定需要一个弓箭

    • 两个气球挨在一起不重叠也可以一起射爆

    • 以题目示例: [[10,16],[2,8],[1,6],[7,12]]为例,如图:(方便起见,已经排序)

      在这里插入图片描述

  • 代码:

    /**
     * 时间复杂度 : O(NlogN)  排序需要 O(NlogN) 的复杂度
     * 空间复杂度 : O(logN) java所使用的内置函数用的是快速排序需要 logN 的空间
     */
    class Solution {
        public int findMinArrowShots(int[][] points) {
            // 根据气球直径的开始坐标从小到大排序
            // 使用Integer内置比较方法,不会溢出
            Arrays.sort(points,(a,b) -> Integer.compare(a[0],b[0]));
    
            int count = 1;// points 不为空至少需要一支箭
            for(int i = 1;i < points.length;i++){
                // 气球i的左边界大于气球i-1的右边界,说明不挨着
                if(points[i][0] > points[i - 1][1]){
                    count++;//需要一支箭
                }else{ // 气球i和气球i-1挨着
                    // 更新重叠气球最小右边界
                    points[i][1] = Math.min(points[i][1],points[i - 1][1]);
                }
            }
            return count;
        }
    }
    
  • 总结:

    • 局部最优:当气球出现重叠,一起射,所用弓箭最少。
    • 全局最优:把所有气球射爆所用弓箭最少。
    • 如果把气球排序之后,从前到后遍历气球,被射过的气球仅仅跳过就行了,没有必要让气球数组remove气球,只要记录一下箭的数量就可以了。

1.2无重叠区间

  • 题目链接:435. 无重叠区间 - 力扣(LeetCode)

    在这里插入图片描述

  • 视频讲解:贪心算法,依然是判断重叠区间 | LeetCode:435.无重叠区间_哔哩哔哩_bilibili

  • 文档讲解:https://programmercarl.com/0435.%E6%97%A0%E9%87%8D%E5%8F%A0%E5%8C%BA%E9%97%B4.html

  • 解题思路:贪心算法

  • 代码:

    class Solution {
        public int eraseOverlapIntervals(int[][] intervals) {
            Arrays.sort(intervals, (a, b) -> Integer.compare(a[0], b[0]));
    
            int count = 0;
            for (int i = 1; i < intervals.length; i++) {
                if (intervals[i][0] < intervals[i - 1][1]) {
                    count++;
                    intervals[i][1] = Math.min(intervals[i][1], intervals[i - 1][1]);
                }
            }
            return count;
        }
    }
    
  • 总结:

    • 思路和用最少数量的箭引爆气球大同小异

1.3划分字母区间

  • 题目链接:763. 划分字母区间 - 力扣(LeetCode)

    在这里插入图片描述

  • 视频讲解:贪心算法,寻找最远的出现位置! LeetCode:763.划分字母区间_哔哩哔哩_bilibili

  • 文档讲解:https://programmercarl.com/0763.%E5%88%92%E5%88%86%E5%AD%97%E6%AF%8D%E5%8C%BA%E9%97%B4.html

  • 解题思路:贪心

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

    • 可以分为如下两步:

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

      在这里插入图片描述

  • 代码:

    class Solution {
        public List<Integer> partitionLabels(String s) {
            int[] hash = new int[27];
            //记录每个字母最远位置
            for(int i = 0;i < s.length();i++){
                hash[s.charAt(i) - 'a'] = i;
            }
            //记录结果
            List<Integer> result = new ArrayList<>();
            int left = 0;
            int right = 0;
            for(int i = 0;i < s.length();i++){
                right = Math.max(right,hash[s.charAt(i) - 'a']);
                if(i == right){
                    result.add(right - left + 1);
                    left = i + 1;
                }
            }
            return result;
        }
    }
    
  • 总结:

    • 这道题目leetcode标记为贪心算法,说实话,我没有感受到贪心,找不出局部最优推出全局最优的过程。就是用最远出现距离模拟了圈字符的行为。

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

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

相关文章

ColorThief的介绍与使用

概述 colorThief是一个 Javascript 插件&#xff0c;支持在浏览器端或 Node 环境中使用。Thief的中文意思是偷窃、小偷。colorThief的作用就是通过算法去获取图片的色源。 API 介绍与示例 colorThief提供两个方法&#xff0c;getColor和getPalette&#xff0c;这两个方法在 …

类和对象(c++)

欢迎来到本期频道&#xff01; 类和对象 类定义&#xff1a;格式&#xff1a;类域&#xff1a;访问限定符友元内部类this指针静态与非静态成员关系类型转换六大默认成员函数&#xff08;C98&#xff09;1️⃣构造函数2️⃣拷贝构造函数浅拷贝与深拷贝 3️⃣赋值重载拷贝函数4️…

x-cmd pkg | superfile: 终端文件管理器,界面精致美观

目录 简介快速上手功能特点竞品和相关项目进一步阅读 简介 superfile 是 github.com/yorukot 用 Go 开发的终端文件管理器&#xff0c;相比于其他终端文件管理器&#xff0c;它最显著的特点是 UI 精致美观。 Tip Superfile 采用了特殊的 Unicode 符号来标识各种类型的文件&…

【我的 PWN 学习手札】Unsortedbin Leak

前言 从前都是野路子学习&#xff0c;学校时间也比较紧张&#xff0c;没有能够好好总结。一直有做个人笔记的习惯&#xff0c;但是学习路线比较分散盲目&#xff0c;虽然跟着wiki做&#xff0c;但是也面临知识点不全的窘境。近期开始跟着课程系统的学习&#xff0c;对于老的知…

mp3转文字要怎么处理?使用这4个工具就对了

MP3是音频当中比较常用的格式&#xff0c;如果像将其转换成文字内容&#xff0c;一般的语音转文字工具都是可以完成的。但是音频转换成文字的过程中&#xff0c;它的准确率是会受到像口音&#xff0c;语言&#xff0c;环境音等因素的影响的。所以大家如果想将自己的mp3语音转成…

en造数据结构与算法C# 用数组实现个栈还不简单???看我一秒破之!!!(unity演示)

实现效果 线性表&#xff0c;线性表是指数据元素按顺序排列的一种数据结构&#xff0c;下面这些东西可以说都是线性表&#xff0c;所以用array实现三者一点问题都没有 分别是List动态数组&#xff0c;stack栈和queue队列&#xff0c;今天就秒掉stack 栈&#xff1a;先进后出 实…

Vue邮件发送:如何有效集成邮件发送功能?

vue邮件发送功能实现方法&#xff1f;Vue邮件发送性能怎么优化&#xff1f; 无论是用户注册验证、密码重置&#xff0c;还是通知提醒&#xff0c;邮件发送功能都能提供重要的支持。本文将详细探讨如何在Vue项目中有效集成邮件发送功能&#xff0c;确保邮件能够准确、及时地送达…

万龙觉醒免费辅助:VMOS云手机辅助巴克尔阵容搭配攻略!

《万龙觉醒》是一款策略类手游&#xff0c;选择合适的英雄阵容搭配能够极大提升战斗效果。而借助VMOS云手机的辅助功能&#xff0c;玩家可以更加轻松地管理游戏进程&#xff0c;优化操作体验。以下是VMOS云手机的三大核心功能&#xff0c;帮助你更好地掌控《万龙觉醒》战局。 V…

通信工程学习:什么是QoS服务质量

QoS服务质量 在通信工程中&#xff0c;QoS&#xff08;Quality of Service&#xff0c;服务质量&#xff09;是一个至关重要的概念&#xff0c;它关乎网络性能的提升和用户体验的优化。QoS是网络的一种安全机制&#xff0c;旨在通过一系列技术和策略来优化网络资源的分配&#…

代码随想录打卡Day30

今天的题目还可以&#xff0c;第一题看了视频&#xff0c;看卡哥把问题转化成数学问题&#xff0c;把图画出来以后就会了&#xff0c;剩下两题没看视频直接AC的。 452. 用最少数量的箭引爆气球 这个题主要是画完图以后就很好理解了&#xff0c;需要先对区间按照区间左值进行排…

飞速了解Conda的作用和安装使用教程

当我们想要在github上克隆不同的项目下来运行时&#xff0c;会发现项目的语言环境或包的版本不同&#xff0c;出现版本冲突问题会导致程序无法运行、兼容性问题频出。我们常常需要管理多个项目&#xff0c;每个项目可能依赖于不同的包版本或编程语言环境。如果不加以管理&#…

华为OD机试 - 报文响应时间 - 贪心算法、位运算(Java 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;E卷D卷A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加…

基于SpringBoot的准妈妈孕期交流平台

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot框架 工具&#xff1a;IDEA/Eclipse、Navicat 系统展示 首页 管理员登录 用户管理 早教…

C++ STL关联容器Set与集合论入门

1. 简介 Set&#xff08;集合&#xff09;属于关联式容器&#xff0c;也是STL中最实用的容器&#xff0c;关联式容器依据特定的排序准则&#xff0c;自动为其元素排序。Set集合的底层使用一颗红黑树&#xff0c;其属于一种非线性的数据结构&#xff0c;每一次插入数据都会自动…

【F的领地】项目拆解:小学教辅资料

项目介绍 虚拟资料项目的赛道其实一直可以做&#xff0c;实际上就是一个信息差项目。 知识付费是常青树&#xff0c;人天生有为知识付费的倾向。 而且虚拟资料通常一份 19~99 的资料有这方面需求很容易就能付款。 主要是产附属的流量再提问题。 我有个同乡&#xff0c;18年…

DDOS攻击学习-scapy使用python编写SYN拒绝服务攻击

文章目录 启动&配置发送数据怎么查看回答查看详细的数据sinff()hexdump() 使用python进行SYN拒绝服务攻击 安装npcap可以查看此教程 启动&配置 scapy#控制台输入如图所示可以查看IP等, 格式是 变量名 IP()/TCP()你可以查看相关信息 变量名.show()以上的值都可以进行…

2024第三届大学生算法大赛 真题训练2 解题报告 | 珂学家 | FFT/NTT板子

前言 题解 D是FFT板子题&#xff0c;这么来看&#xff0c;其实处于ACM入门题&#xff0c;哭了T_T. D. 行走之谜 思路: FFT 如果你知道多项式乘法&#xff0c;继而知道FFT&#xff0c;那题纯粹就是板子题&#xff0c;可惜当时比赛的时候&#xff0c;无人AC。 这题来简单抽象…

最好磁吸充电宝是哪个牌子?目前公认好用磁吸充电宝排行榜!

在现代生活中&#xff0c;移动设备的普及使得充电宝成为了人们日常出行必备的工具。尤其是磁吸充电宝&#xff0c;以其便捷的使用体验和高效的充电速度&#xff0c;逐渐受到消费者的青睐。然而&#xff0c;在选择充电宝时&#xff0c;安全性能是不可忽视的重要因素。一个好的充…

Redis入门1

Redis简介 Redis是一个基于内存的 key-value 结构数据库。 基于内存存储&#xff0c;读写性能高 适合存储热点数据(热点商品、资讯、新闻) 企业应用广泛 官网:https://redis.io 中文网:https://www.redis.net.cn/ window版启动命令 redis-server.exe redis.windows.con…

使用dnSpy调试服务端IIS部署的WebService的程序集

服务器上部署的C#编写WebService出现问题&#xff0c;需要排查&#xff0c;但没有对应的源码&#xff0c;只能在服务器端想办法调试。   IIS中部署的WebService服务&#xff0c;其应用程序池对应操作系统中的w3p.exe进程&#xff08;高版本IIS对应的进程是w3wp&#xff09;。…