当前位置: 首页 > news >正文

贪心算法(区间问题)

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

题目(求无重复区间)

有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points ,其中points[i] = [xstart, xend] 表示水平直径在 xstartxend之间的气球。你不知道气球的确切 y 坐标。

一支弓箭可以沿着 x 轴从不同点 完全垂直 地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 x``startx``end, 且满足 xstart ≤ x ≤ x``end,则该气球会被 引爆 。可以射出的弓箭的数量 没有限制 。 弓箭一旦被射出之后,可以无限地前进。

给你一个数组 points返回引爆所有气球所必须射出的 最小 弓箭数

示例 1:

输入:points = [[10,16],[2,8],[1,6],[7,12]]
输出:2
解释:气球可以用2支箭来爆破:
-在x = 6处射出箭,击破气球[2,8]和[1,6]。
-在x = 11处发射箭,击破气球[10,16]和[7,12]。

示例 2:

输入:points = [[1,2],[3,4],[5,6],[7,8]]
输出:4
解释:每个气球需要射出一支箭,总共需要4支箭。

示例 3:

输入:points = [[1,2],[2,3],[3,4],[4,5]]
输出:2
解释:气球可以用2支箭来爆破:
- 在x = 2处发射箭,击破气球[1,2]和[2,3]。
- 在x = 4处射出箭,击破气球[3,4]和[4,5]。

答案

class Solution {public int findMinArrowShots(int[][] points) {Arrays.sort(points,(a,b)->Integer.compare(a[0],b[0]));//不会溢出int res = 1;for(int i=1;i<points.length;i++){if(points[i][0]>points[i-1][1]){res++;}else{points[i][1] = Math.min(points[i-1][1],points[i][1]);}}return res;}
}






435. 无重叠区间

题目

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

示例 1:

输入: intervals = [[1,2],[2,3],[3,4],[1,3]]
输出: 1
解释: 移除 [1,3] 后,剩下的区间没有重叠。

示例 2:

输入: intervals = [ [1,2], [1,2], [1,2] ]
输出: 2
解释: 你需要移除两个 [1,2] 来使剩下的区间没有重叠。

示例 3:

输入: intervals = [ [1,2], [2,3] ]
输出: 0
解释: 你不需要移除任何区间,因为它们已经是无重叠的了。

答案

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






763. 划分字母区间

题目

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

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

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

示例 1:

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

示例 2:

输入:s = "eccbbbbdec"
输出:[10]

答案

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






56. 合并区间

题目

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

示例 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] 可被视为重叠区间。

答案

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






738. 单调递增的数字

题目

当且仅当每个相邻位数上的数字 xy 满足 x <= y 时,我们称这个整数是单调递增的。

给定一个整数 n ,返回 小于或等于 n 的最大数字,且数字呈 单调递增

示例 1:

输入: n = 10
输出: 9

示例 2:

输入: n = 1234
输出: 1234

示例 3:

输入: n = 332
输出: 299

答案

class Solution {public int monotoneIncreasingDigits(int n) {String[] strs = (n+"").split("");int start = strs.length;for(int i=strs.length-1;i>0;i--){if(Integer.parseInt(strs[i-1])>Integer.parseInt(strs[i])){strs[i-1] = (Integer.parseInt(strs[i-1])-1)+"";start = i;}}for(int i=start;i<strs.length;i++){strs[i] = "9";}return Integer.parseInt(String.join("",strs));}
}






968. 监控二叉树

题目

给定一个二叉树,我们在树的节点上安装摄像头。

节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。

计算监控树的所有节点所需的最小摄像头数量。

示例 1:

在这里插入图片描述

输入:[0,0,null,0,0]
输出:1
解释:如图所示,一台摄像头足以监控所有节点。

示例 2:

在这里插入图片描述

输入:[0,0,null,0,null,0,null,null,0]
输出:2
解释:需要至少两个摄像头来监视树的所有节点。 上图显示了摄像头放置的有效位置之一。

答案

class Solution {int res;public int minCameraCover(TreeNode root) {if(deal(root)==0){res++;}return res;}int deal(TreeNode root){//0 没有被监控  1 放监控  2 孩子监控  后序遍历if(root==null){return 2;}int left = deal(root.left);int right = deal(root.right);if(left==2 && right==2){return 0;}else if(left==0 || right==0){res++;return 1;}else{return 2;}}
}

相关文章:

贪心算法(区间问题)

452. 用最少数量的箭引爆气球 题目(求无重复区间) 有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points &#xff0c;其中points[i] [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。你不知道气球的确切 y 坐标。 一支弓箭可以沿着…...

【Javascript】设计模式之策略模式

文章目录 1、使用策略模式计算奖金2、JavaScript 版本的策略模式3、应用&#xff1a;表单验证3.1 用策略模式进行表单验证3.2 给某个文本输入框添加多种校验规则 4、策略模式的优缺点 策略模式的定义是&#xff1a;定义一系列的算法&#xff0c;把它们一个个封装起来&#xff0…...

vue面试题:如何保存页面的当前的状态?

如何保存页面的当前的状态&#xff1f; 既然是要保持页面的状态&#xff08;其实也就是组件的状态&#xff09;&#xff0c;那么会出现以下两种情况&#xff1a;组件会被卸载&#xff1a;&#xff08;1&#xff09;将状态存储在LocalStorage / SessionStorage优点&#xff1a;缺…...

Java的编程之旅34——Interger包装类

1.API简介 Java的API&#xff08;Application Programming Interface&#xff0c;应用程序编程接口&#xff09;是一组提供给程序员使用的代码库&#xff0c;用于开发Java应用程序。Java的API包括了各种类和接口&#xff0c;用于处理输入输出、图形用户界面、网络通信、数据库…...

C# Winform画图绘制圆形

一、因为绘制的圆形灯需要根据不同的状态切换颜色,所以就将圆形灯创建为用户控件 二、圆形灯用户控件 1、创建用户控件UCLight 2、设值用户控件大小(30,30)。放一个label标签,AutoSize为false(不自动调整大小),Dock为Fill(填充),textaglign为居中显示。 private Color R…...

Unity(第十六部)声音和视频

声音 1、听声音 创建相机的时候&#xff0c;相机自带Audio Listener 多个相机的时候&#xff0c;我们只保留一个Audio Listener就可以 2、声音源&#xff0c;环境音 添加Audio Source就行中文叫声音源 3、脚本执行的声音 using System.Collections; using System.Collection…...

Linux(CentOS)学习

一、认识Linux 1、如何修改Linux时区 2、配置固定IP 3、重启网络服务 3、小技巧快捷键 4、环境变量设置 5、Linux文件的上传和下载 6、压缩和解压 二、基础命令 1、目录命令 (1、)查看目录内容&#xff08;ls&#xff09; 1、ls //查看当前目录内容 2、- a //显示隐藏内容 3…...

HTML最强入门学习笔记+GitHub小项目源码

HTML学习笔记 GitHub项目链接: 点我跳转GitHub 本博客采用markdown编写&#xff0c;上面这个链接跳转就是采用了html的<a></a>的代码设计的跳转提示~ 1.创建文件可以使用 ! 在VSCode中进行快速补全从而生成一整个HTML结构 HTML组成 <!DOCTYPE html><htm…...

《Spring Security 简易速速上手小册》第4章 授权与角色管理(2024 最新版)

文章目录 4.1 理解授权4.1.1 基础知识详解授权的核心授权策略方法级安全动态权限检查 4.1.2 主要案例&#xff1a;基于角色的页面访问控制案例 Demo 4.1.3 拓展案例 1&#xff1a;自定义投票策略案例 Demo测试自定义投票策略 4.1.4 拓展案例 2&#xff1a;使用方法级安全进行细…...

【java类的使用,及注意事项】

Java类的使用是通过创建对象来调用类的方法和访问类的属性。首先&#xff0c;要在Java中创建一个类&#xff0c;需要使用关键字class&#xff0c;然后给类一个名称&#xff0c;并在代码块中定义类的属性和方法。 例如&#xff0c;下面是一个简单的Java类的示例&#xff1a; p…...

[JSOI2008] 最大数 题解 线段树

[JSOI2008] 最大数 传送门 题目描述 现在请求你维护一个数列&#xff0c;要求提供以下两种操作&#xff1a; 查询操作。 语法&#xff1a;Q L 功能&#xff1a;查询当前数列中末尾 L L L 个数中的最大的数&#xff0c;并输出这个数的值。 限制&#xff1a; L L L 不超过…...

python爬虫之app爬取-charles的使用

专栏系列:http://t.csdnimg.cn/WfCSx 前言 前面介绍的都是爬取 Web 网页的内容。随着移动互联网的发展,越来越多的企业并没有提供 Web 网页端的服务,而是直接开发了 App,更多更全的信息都是通过 App 来展示的。那么针对 App 我们可以爬取吗?当然可以。 App 的爬取相比 …...

神经网络结构——CNN、RNN、LSTM、Transformer !!

文章目录 前言 一、什么是CNN 网络结构 解决问题 工作原理 实际应用 二、什么是RNN 网络结构 解决问题 工作原理 应用场景 三、什么是LSTM 网络结构 解决问题 工作原理 应用场景 四、什么是Transformer 网络结构 解决问题 工作原理 BERT GPT 前言 本文将从什么是CNN&#xff1…...

mysql 事务的隔离级别

一、事务的隔离级别要解决的问题&#xff1a; 1&#xff09;脏读&#xff1a;读到了其它事务未提交的数据即脏读&#xff0c;未提交意味着数据有可能会被回滚&#xff0c;也就是最终有可能不会存储到数据库中&#xff0c;即读到了最终不一定存在存在的数据&#xff0c;即为脏读…...

Unity3D 阴影的计算原理详解

前言 阴影是游戏中的重要特效之一&#xff0c;可以增加游戏的真实感和立体感。在Unity3D中&#xff0c;阴影的计算原理主要包括阴影的产生、投影和渲染。 对惹&#xff0c;这里有一个游戏开发交流小组&#xff0c;希望大家可以点击进来一起交流一下开发经验呀&#xff01; 首…...

【物联网应用案例】从0到N,智慧农业的数据价值

智慧农业全方位渗透到农业的每一个环节&#xff0c;云端解决方案更推动了研究人员、农艺师及农民间的密切协作&#xff0c;为研发企业提供了既经济又具扩展性的完美方案。 据IDC预计&#xff0c;到2036年&#xff0c;农场收集的数据量将增加800%以上&#xff0c;这凸显了农业数…...

文生视频基础1:sora技术报告学习

sora技术报告学习 背景学后理解训练流程技术拆解编码解码扩散模型训练用数据 28号直播交流会后的一些想法自身的一点点想法 参考 原文地址&#xff1a;Video generation models as world simulators 背景 此项目的背景是基于Datawhale的关于sora技术文档的拆解和相关技术讲解…...

Linux第68步_旧字符设备驱动的一般模板

file_operations结构体中的函数就是我们要实现的具体操作函数。 注意&#xff1a; register_chrdev()和 unregister_chrdev()这两个函数是老版本驱动使用的。现在新字符设备驱动已经不再使用这两个函数&#xff0c;而是使用Linux内核推荐的新字符设备驱动API函数。 1、创建C…...

23种设计模式——工厂方法模式

定义&#xff1a; 一个用于创建对象的接口&#xff0c;让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其他子类。 工厂方法通用类图&#xff1a; 这个图更好理解 在工厂方法模式中&#xff0c;抽象产品类Product负责定义产品的共性&#xff0c;实现对事物最抽象的…...

水豚鼠标助手 强大的鼠标美化工具

水豚鼠标助手 水豚鼠标助手是一款 鼠标换肤、屏幕画笔、放大镜、聚光灯、屏幕放大、倒计时功能的强大屏幕演示工具。 软件助手获取 水豚鼠标助手1.0.0 安装教程 第一步&#xff1a;下载后&#xff0c;双击软件安装包 第二步&#xff1a;Windows可能会出现提示弹窗&#xff…...

两个世界的同一种崩溃:从窗口黑屏到宇宙热寂的同构联想

一、两个世界的同一种崩溃 一段着色器代码中 cell.xy 的缩放因子从 9 被修改为 99。着色器随即呈现完全黑屏——既无报错信息&#xff0c;也无渲染异常&#xff0c;只有纯粹、彻底、连噪点都不存在的黑色。在屏幕的某个抽象维度上&#xff0c;发生了一件与理论物理学家在黑板上…...

鸿蒙electron跨端框架PC导出管家实战:把交付前的检查、复制和导出做成一个工坊

前言 欢迎加入鸿蒙PC开发者社区&#xff0c;共同打造开发者工具生态&#xff1a;鸿蒙PC开发者社区 &#xff1a;https://harmonypc.csdn.net/ 项目开源地址&#xff1a;https://AtomGit.com/lqjmac/ele-daochuguanjia 我做 导出管家 时最先确认的&#xff0c;不是颜色和布局…...

AI量化交易中的信号相关性与认知依赖:系统性风险与应对策略

1. 项目概述&#xff1a;当AI成为市场共识&#xff0c;系统性风险如何被“编程”&#xff1f;在金融市场的交易大厅和量化部门的代码仓库里&#xff0c;一场静默的变革已经持续了十年。这不是关于某个算法战胜了市场&#xff0c;而是关于市场本身正在被算法重新定义。核心矛盾在…...

进程与线程:并发编程基础

摘要&#xff1a;进程与线程是操作系统面试的必考点&#xff0c;也是理解 AI 分布式训练和多线程数据加载的基础。本文从进程内存模型出发&#xff0c;系统讲解线程同步机制&#xff08;锁、信号量、条件变量&#xff09;&#xff0c;并通过 Python 代码展示多线程爬虫和生产者…...

认知殖民的几何级放大器:论概率拟合AI范式的内生危机、利益锁定与公理驱动的范式跃迁

认知殖民的几何级放大器&#xff1a;论概率拟合AI范式的内生危机、利益锁定与公理驱动的范式跃迁 摘要 当前&#xff0c;以大语言模型为核心的生成式人工智能掀起全球技术热潮&#xff0c;“涌现特性”“通用人工智能”等概念持续主导行业舆论与研发风向。然而剥离技术表象与…...

05-系统技术架构师必备——软件工程方法与UML建模体系

关键词&#xff1a;UML建模、Scrum、敏捷开发、软件测试、白盒测试、McCabe复杂度、瀑布模型、RUPUML 软件工程 敏捷开发 软件测试 Scrum RUP 系统架构 建模系统技术架构师必备——软件工程方法与UML建模体系 摘要 UML建模和软件工程方法是系统技术架构师与开发团队沟通的"…...

收藏!2026 程序员破局:Java 寒冬已至,大模型才是真风口

凌晨一点半&#xff0c;手机屏幕突然亮起&#xff0c;是做Java后端开发的发小发来的消息&#xff0c;字里行间全是慌乱与不甘&#xff1a;“刚收到公司裁员通知&#xff0c;名单已经定死了&#xff0c;我真的懵了——部门里干了五年的资深老程都没保住&#xff0c;我这三年经验…...

JMeter直播间压测实战:长连接、多协议与状态管理

1. 直播间压测不是“点几下鼠标”的事&#xff0c;而是对整个实时链路的生死拷问 别天天看看直播了——这句话背后藏着太多人没意识到的残酷现实&#xff1a;你刷的每一场高人气直播间&#xff0c;背后都是一场毫秒级的并发风暴。弹幕像洪水一样涌进来&#xff0c;礼物特效在千…...

Forza Painter终极指南:3分钟将任何图片变成专业车辆涂装

Forza Painter终极指南&#xff1a;3分钟将任何图片变成专业车辆涂装 【免费下载链接】forza-painter Import images into Forza 项目地址: https://gitcode.com/gh_mirrors/fo/forza-painter 还在为《极限竞速&#xff1a;地平线》系列游戏中复杂的车辆涂装设计而烦恼吗…...

jStorage核心功能详解:从基础存储到高级TTL设置

jStorage核心功能详解&#xff1a;从基础存储到高级TTL设置 【免费下载链接】jStorage jStorage is a simple key/value database to store data on browser side 项目地址: https://gitcode.com/gh_mirrors/js/jStorage jStorage是一个简单而强大的浏览器端键值存储数据…...