力扣爆刷第148天之贪心算法五连刷(区间合并)

力扣爆刷第148天之贪心算法五连刷(区间合并)

文章目录

      • 力扣爆刷第148天之贪心算法五连刷(区间合并)
      • 一、406. 根据身高重建队列
      • 二、452. 用最少数量的箭引爆气球
      • 三、435. 无重叠区间
      • 四、763. 划分字母区间
      • 五、56. 合并区间
      • 六、738. 单调递增的数字

一、406. 根据身高重建队列

题目链接:https://leetcode.cn/problems/queue-reconstruction-by-height/description/
思路:本题身高排序,有两个维度,一个是身高,一个是排队人数,让我们按照这两个维度对数组进行排序,使其满足要求。
维度要分开看,当身高相同时,排队元素需要升序排列,当身高不同时,身高需要降序排列(如果身高升序排列将导致排在前面的人数为0)。
按照以上要求排列好以后,一定是身高高的都排在前面,身高矮的排在后面,身高相同的排队人数升序,所以这个时候就按照排队人数把元素插入新数组,即可实现排序。
在这里插入图片描述

class Solution {public int[][] reconstructQueue(int[][] people) {List<int[]> list = new ArrayList<>();// 身高相同数量升序,身高不同身高降序Arrays.sort(people, (a, b) -> {if(a[0] == b[0]) return a[1] - b[1];else return b[0] - a[0];});for(int[] nums : people) {list.add(nums[1], nums);}return list.toArray(new int[list.size()][]);}
}

二、452. 用最少数量的箭引爆气球

题目链接:https://leetcode.cn/problems/minimum-number-of-arrows-to-burst-balloons/description/
思路:求用最少数量的箭引爆气球,本质上是求区间的交集有几个,交集有几个,就需要几个箭,求交集只需要先按照左区间进行排序,然后选择最小的右边界,即可。

class Solution {public int findMinArrowShots(int[][] points) {Arrays.sort(points, (a, b) -> Integer.compare(a[0], b[0]));int count = 1, right = points[0][1];for(int[] nums : points) {if(nums[0] > right) {count++;right = nums[1];}else{right = Math.min(right, nums[1]);}}return count;}
}

三、435. 无重叠区间

题目链接:https://leetcode.cn/problems/non-overlapping-intervals/description/
思路:本题其实求的是无重叠区间的个数,用总区间个数减去无重叠区间的个数,即为要去掉的区间的个数。
求把多个区间去掉最少区间成为无重叠区间,首先先把所有的区间按照左边界排序,然后维护一个区间进行比较,如果当前区间的左边界位于其中,说明区间重叠了,是需要计数的,作为去掉一个区间,然后右边界改成相交的两个区间的最小的右边界,这样可以尽最大努力避免区间重叠,如果当前区间的左边界位于维护区间的右边界之外,则说明无重叠区间,又因为都是按照左边界排序的,只需要把右边界改成最右边的边界即可。

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

四、763. 划分字母区间

题目链接:https://leetcode.cn/problems/partition-labels/description/
思路:划分字母区间,尽可能划分较大的区间,让所有字母只出现在一个区间中,所以只需要先遍历一遍字符串,然后记录下来各个字母出现的最远距离,然后再遍历一遍字符串,不断更新当前字母最远出现的距离,只要遍历到这个距离,就划分出了一个区间。以此往复即可。

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

五、56. 合并区间

题目链接:https://leetcode.cn/problems/merge-intervals/
思路:和前面的几道区间相关的题来说非常简单,就是判断当前区间的左边界是否位于上一个区间之中,位于就合并,不位于就是单独的区间。

class Solution {public int[][] merge(int[][] intervals) {if(intervals.length == 1) return intervals;Arrays.sort(intervals, (a, b) -> a[0] - b[0]);List<int[]> list = new ArrayList<>();for(int i = 1; i < intervals.length; i++) {if(intervals[i][0] <= intervals[i-1][1]) {intervals[i][0] = intervals[i-1][0];intervals[i][1] = Math.max(intervals[i][1], intervals[i-1][1]);}else{int[] temp = {intervals[i-1][0], intervals[i-1][1]};list.add(temp);}}list.add(new int[]{intervals[intervals.length-1][0], intervals[intervals.length-1][1]});int[][] result = new int[list.size()][2];for(int i = 0; i < list.size(); i++) {result[i] = list.get(i);}return result;}
}

六、738. 单调递增的数字

题目链接:https://leetcode.cn/problems/monotone-increasing-digits/description/
思路:将一个数改成距离它最小的单调递增的数,其实很简单,如果两个数逆序,如53,那么最大的递增数为49,那么只需要从右边往左边找,找到第一个逆序,逆序后面的都改成9即可。

class Solution {public int monotoneIncreasingDigits(int n) {String s = String.valueOf(n);char[] cnum = s.toCharArray();int k = cnum.length;for(int i = cnum.length-2; i >= 0; i--) {if(cnum[i] > cnum[i+1]){cnum[i]--;k = i + 1;}}for(int i = k; i < cnum.length; i++) {cnum[i] = '9';}return Integer.parseInt(String.valueOf(cnum));}
}

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

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

相关文章

笔记-Python pip配置国内源

众所周知&#xff0c;Python使用pip方法安装第三方包时&#xff0c;需要从 https://pypi.org/ 资源库中下载&#xff0c;但是会面临下载速度慢&#xff0c;甚至无法下载的尴尬&#xff0c;这时&#xff0c;你就需要知道配置一个国内源有多么重要了&#xff0c;通过一番摸索和尝…

【AIOT-Robot】3D pos 相关

1. Mediapipe 3D detection 使用移动增强现实(AR)会话数据(session data),开发了新的数据pipeline。大部分智能手机现在都具备了增强现实的功能,在这个过程中捕捉额外的信息,包括相机姿态、稀疏的3D点云、估计的光照和平面。 利用相机的姿势、检测到的平面、估计的照明,来生…

vsCode双击文件才能打开文件,单击文件只能预览?

解决&#xff1a; 1、打开设置 2、搜索workbench.editor.enablePreview 3、更改为不勾选状态 4、关闭设置 效果&#xff1a; 现在单击一个文件时&#xff0c;将会在编辑器中直接打开&#xff0c;而非是预览状态。

(uniapp)简单带动画的tab切换效果

效果图 代码 <template><view class"tabBox"><view :style"{transform: translateX(${translateX})}" class"whiteBox"></view><view click"changeTab(k)" class"itemBox" v-for"(v,k) in…

【Java】代码块

代码块介绍 目录 1.代码块2.代码块分类静态代码块动态代码块 1.代码块 代码块是类的五大成分之一&#xff0c;包括成员变量、构造器、方法、代码块、内部类。 2.代码块分类 代码块分两种&#xff1a; 静态代码块 测试类 public class Test {public static void main(Stri…

LeetCode刷题 | Day 4 分割等和子集(Partition Equal Subset Sum)自底向上动态规划

LeetCode刷题 | Day 4 分割等和子集(Partition Equal Subset Sum)自底向上动态规划 文章目录 LeetCode刷题 | Day 4 分割等和子集(Partition Equal Subset Sum)自底向上动态规划前言一、题目概述二、解题方法2.1 一维表格的自底向上动态规划2.1.1 思路讲解2.1.2 伪代码 + 逐…

002.数据分析_Pandas初识

我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448; 入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448; 虚 拟 环 境 搭 建 &#xff1a;&#x1f449;&…

MySQL-权限管理(二)

一 host中的含义 /usr/local/mysql/bin/mysql -pLXYlxy2:024.#8u} -S /data/mysql/tmp/mysqld.sock select user,host,authentication_string from mysql.user; %:主要允许从任何主机连接到MySQL服务器&#xff0c;即外部连接localhost: 代表只允许本地主机连接到MySQL服务器&…

[AIGC] 详解Mockito - 简单易学的Java单元测试框架

在Java的世界中, 单元测试是一项非常重要的任务. Mockito作为一个强大灵活的mock框架&#xff0c;可以帮助我们有效的编写和管理我们的单元测试. 了解并掌握Mockito的使用对于提高我们的开发效率和保证我们的软件质量有着巨大的帮助. 文章目录 什么是Mockito?Mockito的核心API…

Spring Boot中整合Jasypt 使用自定义注解+AOP实现敏感字段的加解密

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

奥威BI零售数据分析方案的优缺点一览

奥威BI零售数据分析方案是一套基于BI大数据智能可视化分析系统&#xff0c;根据零售企业数据分析共性需求、业务特殊性量身打造&#xff0c;点击下载应用&#xff0c;立即将零售数据情况分析清楚&#xff0c;直观呈现。很多企业都是直接在该零售数据分析方案的基础上实现了智能…

mybatis动态SQL的if判断是否等于某个值查询条件无效

我们在使用mybaits时&#xff0c;经常使用if条件来做动态查询&#xff0c; 当查询条件是字符串类型时&#xff0c;要写不等于某个空的情况要考虑不等于null和不等于空字符串 当查询条件是日期类型或者long&#xff0c;Integer 等类型时&#xff0c;if条件里不能写不等于空字符串…

Junit(Java单元测试)

配置文件 要想使用 Junit 进行单元测试需要引入以下第三方库&#xff1a; 引入后可以使用 Test&#xff0c;BeforeEach等注解 <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api --><dependency><groupId>org.junit.jupiter<…

eclipse添加maven插件

打开eclipse菜单 Help/Install New SoftwareWork with下拉菜单选择 2022-03 - https://download.eclipse.org/releases/2022-03‘type filter text’搜索框中输入 maven选择 M2E - Maven Integration for Eclipse一路next安装&#xff0c;重启eclipseImport项目时&#xff0c;就…

ESP8266在阿里云上线(arduino)

电脑连接上ESP8266的板子 在arduino编写代码&#xff08;arduino按照之前的配置&#xff0c;已安装好esp的开发板和几个库ArduinoJson我选了5.的版本&#xff0c;PubSubclient,Crypto,AliyunIoTSDK并且修改pubsubclient的参数&#xff09; 在项目&#xff0c;加载库&#xff0c…

【RuoYi】如何解决Postman无法访问RuoYi中的接口数据

一、前言 最近&#xff0c;写项目要求需要将数据返回&#xff0c;指定的接口&#xff0c;并且需要使用Postman来测试接口数据&#xff0c;看是否能够请求到数据。然后项目用的是RuoYi的框架&#xff0c;RuoYi使用了SpringSecurity来做的安全框架&#xff0c;所以在访问的时候&a…

【Linux】ip命令详解

Linux网络排查 目录 一、ip命令介绍 1.1 ip命令简介 1.2 ip命令的由来 二、ip命令使用帮助 2.1 ip命令的help帮助信息 2.2 ip命令对象介绍 2.3 ip命令选项介绍 三、查看网络信息 3.1 显示当前网络接口信息 3.2 显示网络设备运行状态 3.3 显示详细设备信息 3.4 查看…

面向大模型的存储加速方案

参考&#xff1a;面向大模型的存储加速方案设计和实践-百度开发者中心 (baidu.com) 对于一个典型的训练来说&#xff0c;可能迭代多轮 epoch。在每个 epoch 内&#xff0c;首先需要对数据集进行随机打散&#xff0c;然后将打散后的数据划分为若干 batch&#xff0c;每读取一个 …

智谱AI最新开源模型CHATGLM4-9B试用

智谱AI最近开源了GLM4-9B模型。之前已开源chatglm1到chatglm3&#xff0c;相比前面开源的相比GLM3-6B有了大幅度提升。本次开源基本的GLM4-9B&#xff0c;还开源了对话版GLM-4-9B-Chat&#xff0c; 多模态版GLM-4V-9B&#xff0c; 长文本版GLM-4-9B-Chat-1M。 在语义、数学、推…

软件杯 题目:基于深度学习卷积神经网络的花卉识别 - 深度学习 机器视觉

文章目录 0 前言1 项目背景2 花卉识别的基本原理3 算法实现3.1 预处理3.2 特征提取和选择3.3 分类器设计和决策3.4 卷积神经网络基本原理 4 算法实现4.1 花卉图像数据4.2 模块组成 5 项目执行结果6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基…