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

LeetCode - 贪心算法 (Greedy Algorithm) 集合 [分配问题、区间问题]

欢迎关注我的CSDN:https://spike.blog.csdn.net/
本文地址:https://spike.blog.csdn.net/article/details/139242199

饼干

贪心算法,是在每一步选择中,都采取当前状态下,最好或最优(即最有利)的选择,从而希望导致结果是最好或最优的算法,在解决各种问题时被广泛应用,包括数组操作、字符串处理、图论等。

贪心算法包括:分配问题区间问题

  1. 455. 分发饼干 - 分配问题
  2. 135. 分发糖果 - 分配问题
  3. 605. 种花问题 - 分配问题
  4. 406. 根据身高重建队列 - 分配问题
  5. 435. 无重叠区间 - 区间问题
  6. 452. 用最少数量的箭引爆气球 - 区间问题
  7. 763. 划分字母区间 - 区间问题
  8. 121. 买卖股票的最佳时机 - 区间问题

1. 分配问题

455. 分发饼干 - 分配问题:

class Solution:def findContentChildren(self, g: List[int], s: List[int]) -> int:"""时间复杂度,来自于排序,O(mlogm + nlogn)空间复杂度,类似,O(logm + logn)"""g = sorted(g)  # 排序s = sorted(s)n, m = len(g), len(s)  # 序列数量i, j = 0, 0while i < n and j < m:  # 全部遍历if g[i] <= s[j]:  # 判断是否吃饱i += 1  # 孩子满足条件j += 1  # 饼干满足条件return i

135. 分发糖果 - 分配问题:

class Solution:def candy(self, ratings: List[int]) -> int:"""时间复杂度 O(n),空间复杂度 O(n)"""n = len(ratings)  # 序列长度res = [1] * n  # 每个孩子至少1个糖果# 正序遍历for i in range(1, n):if ratings[i] > ratings[i-1]:res[i] = res[i-1] + 1  # 要是后面+1# print(f"[Info] res: {res}")# 逆序遍历for i in range(n-1, 0, -1):if ratings[i-1] > ratings[i]:# 逆序需要最大值res[i-1] = max(res[i-1], res[i]+1)  # print(f"[Info] res: {res}")return sum(res)

605. 种花问题 - 分配问题:

class Solution:def canPlaceFlowers(self, flowerbed: List[int], n: int) -> bool:"""时间复杂度 O(n),空间复杂度 O(1)"""res = 0  # 种花数量m = len(flowerbed)  # 花坛长度for i in range(m):# 前面是0,中间是0,最后是0,注意边界if (i==0 or flowerbed[i-1] == 0) and (flowerbed[i] == 0) and (i==m-1 or flowerbed[i+1]==0):res += 1flowerbed[i] = 1return res >= n

406. 根据身高重建队列 - 分配问题,读懂题,根据 -p[0] 和 p[1] 排序,再进行插入,根据 p[1],进行插入。

class Solution:def reconstructQueue(self, people: List[List[int]]) -> List[List[int]]:"""插入之前的位置时间O(n^2),空间O(logn)"""# p[0] 从大到小排序,再次根据 p[1] 从小到大排序people.sort(key=lambda x: (-x[0], x[1]))  # print(f"[Info] people: {people}")n = len(people)  # 人数res = []for p in people:# print(f"[Info] res: {res}")# 根据 p 值的第2位 [正好有k个人],进行排序插入res.insert(p[1], p)  # 在p[1]前一个位置插入return res

2. 区间问题

435. 无重叠区间 - 区间问题

class Solution:def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:"""时间复杂度 O(nlogn) 空间复杂度 O(logn)"""# 根据 end 值排序intervals = sorted(intervals, key=lambda x: x[1])# print(f"[Info] intervals: {intervals}")n = len(intervals)res = 0prev = intervals[0][1]  # 第1个值的末尾值for i in range(1, n):  # 从第2个值开始if intervals[i][0] < prev:  # 前值小于后值res += 1  # 相交else:prev = intervals[i][1]  # 遍历下一个return res

452. 用最少数量的箭引爆气球 - 区间问题,435 题的变换

class Solution:def findMinArrowShots(self, points: List[List[int]]) -> int:"""区间类型题,与 435 类似时间复杂度 O(nlogn),空间复杂度 O(logn)"""# 尾部排序points = sorted(points, key=lambda x: x[1])n = len(points)prev = points[0][1]  # 前值res = 0for i in range(1, n):if prev >= points[i][0]:res += 1  # 重叠值,即1箭射中2个else:prev = points[i][1]return n - res  # 最终值是差值

763. 划分字母区间 - 区间问题,记录字母最后出现的位置,与之前最大位置比较。

class Solution:def partitionLabels(self, s: str) -> List[int]:"""时间复杂度 O(n),空间复杂度 O(len(s))"""n=len(s)  # 序列长度last=[0]*26  # 字母数量# 遍历获取最后出现的位置for i in range(n):j=ord(s[i])-ord('a')last[j]=max(i,last[j])  # 字母最后出现的位置start,end=0,0res=[]for i in range(n):j=ord(s[i])-ord('a')# 当前字母j最后出现的位置last[j],与之前end,取最大值end=max(end,last[j])if end==i:  # end如果等于ires.append(end-start+1) # 序列长度start=end+1  # 起始位置移动return res

121. 买卖股票的最佳时机 - 区间问题

class Solution:def maxProfit(self, prices: List[int]) -> int:"""时间复杂度 O(n),空间复杂度 O(1)"""n=len(prices)  # 全部数量res=0  # 结果for i in range(1,n):# 累加区间价格res+=max(0,prices[i]-prices[i-1])return res

相关文章:

LeetCode - 贪心算法 (Greedy Algorithm) 集合 [分配问题、区间问题]

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/139242199 贪心算法&#xff0c;是在每一步选择中&#xff0c;都采取当前状态下&#xff0c;最好或最优&#xff08;即最有利&#xff09;的选择&…...

Linux中ftp配置

一、ftp协议 1、端口 ftp默认使用20、21端口 20端口用于建立数据连接 21端口用于建立控制连接 2、ftp数据连接模式 主动模式&#xff1a;服务器主动发起数据连接 被动模式&#xff1a;服务器被动等待数据连接 二、ftp安装 yum install -y vsftpd #---下…...

BWVS 靶场测试

一、PHP弱类型 is_numeric() 输入&#xff1a;127.0.0.1/BWVS/bug/php/code.php # 1、源代码分析 如果num不是数字&#xff0c;那么就输出num&#xff0c;同时如果num1&#xff0c;就输出flag。即num要是字符串又要是数字 # 2、函数分析&#xff1a; is_numeric()函数&…...

c++ 里重解释转换之于引用 reinterpret_cast< long >

今天遇到了这一很新奇的写法。模糊中记得王老师也这么讲过。c 里四大转换。把数据重解释为原来数据的引用。虽然也可以直接定义对变量的引用。测试如下&#xff1a; 咱们从反汇编再了解下 c 编译器是怎么处理这种写法的&#xff1a; 谢谢...

JAVASE2

封装的步骤&#xff1a; 1、所有属性私有化&#xff0c;使用private关键字进行修饰&#xff0c;private表示私有的&#xff0c;修饰的所有数据只能在本类中访问 2、对外提供简单入口&#xff1a;比如说被private修饰的成员变量&#xff0c;在其他类中只能通过getXxx/setXxx方法…...

ora-00392 ora-00312错误处理

检查当前日志组状态 对日志组进行clear操作 重新开库无报错...

网页、h5默认滚动条样式重构

文章目录 前言一、使用步骤1、在想要滚动的元素上设置相应的css类名2.设置样式 总结 前言 此文章用于&#xff0c;让我自己快速设置 浏览器、h5 默认滚动条样式…… 一、使用步骤 1、在想要滚动的元素上设置相应的css类名 代码如下&#xff1a; <div class"list scro…...

香橙派AIpro测评上手指南

一、前言 首先非常荣幸受到邀请参加本次香橙派开发板的测评活动&#xff0c;除了令人眼前一亮&#xff0c;做工非常精细的开发板&#xff0c;举办方还非常贴心地准备了散热套件&#xff0c;以及烧录好系统的TF卡&#xff0c;甚至准备了电源适配器&#xff0c;数据线&#xff1…...

GBDT 算法【python,机器学习,算法】

GBDT 即 Gradient Boosting Decision Tree 梯度提升树&#xff0c; 是一种迭代的决策树算法&#xff0c;又叫 MART(Multiple Additive Regression Tree)&#xff0c; 它通过构造一组弱的学习器(树)&#xff0c;然后把多棵决策树的结果累加起来作为最终的预测输出。该算法将决策…...

软考 系统架构设计师系列知识点之SOME/IP与DDS(3)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之SOME/IP与DDS&#xff08;2&#xff09; 本文内容参考&#xff1a; 车载以太网 - SOME/IP简介_someip-CSDN博客 https://zhuanlan.zhihu.com/p/369422441 什么是SOME/IP?_someip-CSDN博客 SOME/IP 详解系列&#…...

将AI大模型装进你的手机,你愿意么?

大数据产业创新服务媒体 ——聚焦数据 改变商业 AI大模型的发展&#xff0c;有两个方向&#xff0c;一个是模型越做越大&#xff0c;以规模来提升性能。还有一个重要的方向&#xff0c;就是通过将模型做小&#xff0c;来嵌入手机、电脑等计算终端&#xff0c;这同样是值得关注…...

前端面试题12-22

12 Proxy是什么&#xff0c;有什么作用&#xff1f; Proxy 是 ES6 (ECMAScript 2015) 引入的一种元编程特性。它允许你创建一个对象&#xff0c;该对象可以拦截和定义基本操作&#xff08;例如属性查找、赋值、枚举、函数调用等&#xff09;。Proxy 提供了一种机制&#xff0c…...

【论文解读】Performance of AV1 Real-Time Mode

论文下载地址:Performance of AV1 Real-Time Mode 时间:2020.10 级别:IEEE 作者:Ludovic Roux 摘要 背景:COVID-19疫情增加了对数字互动的需求,使得实时或低延迟编解码器变得更加重要。现状:大多数编解码器,包括AV1,主要关注于编码效率,这是视频点播(VOD)的主要改…...

java处理中文脱敏

方法一&#xff0c;简单的&#xff0c;不计算文字长度去设置脱敏 public static String dataDesensitization1(String content){String regex "(.{2}).*(.{2})";return ReUtil.replaceAll(content, regex, matcher -> {try {if (CharSequenceUtil.isBlank(match…...

【Linux网络】端口及UDP协议

文章目录 1.再看四层2.端口号2.1引入linux端口号和进程pid的区别端口号是如何生成的传输层有了pid还设置端口号端口号划分 2.2问题2.3netstat 3.UDP协议3.0每学一个协议 都要讨论一下问题3.1UDP协议3.2谈udp/tcp实际上是在讨论什么&#xff1f; 1.再看四层 2.端口号 端口号(Po…...

Unity 生成模版代码

1、创建模版代码文本 using System.Collections; using System.Collections.Generic; using UnityEngine;public class ClassNameScritpItem : MonoBehaviour {public GameObject go;// Start is called before the first frame updatevoid Start(){go new GameObject();}// …...

【ai】chatgpt的plugin已经废弃

发现找不到按钮,原来是要申请: https://openai.com/index/chatgpt-plugins/ 发现申请已经跳转了,好像是废弃了? 不接受新插件了,但是openai的api 是可以继续用的。 https://openai.com/waitlist/plugins/We are no longer accepting new Plugins, builders can now create…...

2024年03月 Python(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,共50分) 第1题 运行如下代码,若输入整数3,则最终输出的结果为?( ) def f(x):if x==1:s=1else:s...

多旋翼无人机机场考哪些内容?

多旋翼无人机机场考试的内容主要包括理论和实飞两部分。 理论考试主要涵盖无人机相关的知识&#xff0c;包括无人机的原理、结构、操作规范等。 实飞考试则主要考察飞行技能&#xff0c;包括飞行操作、航线规划、飞行稳定性等。 具体来说&#xff0c;实飞部分可能包括使用GPS…...

【前端每日基础】day23——箭头函数

箭头函数是ES6&#xff08;ECMAScript 2015&#xff09;引入的一种新的函数表达式语法。相比传统函数&#xff0c;箭头函数有简洁的语法&#xff0c;并且不绑定自己的this、arguments、super或new.target。以下是详细介绍箭头函数的各个方面&#xff1a; 基本语法 单参数箭头函…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

抽象类和接口(全)

一、抽象类 1.概念&#xff1a;如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象&#xff0c;这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法&#xff0c;包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中&#xff0c;⼀个类如果被 abs…...