【LeetCode 刷题】贪心算法(2)-进阶

server/2025/2/7 7:39:00/

此博客为《代码随想录》二叉树章节的学习笔记,主要内容为算法>贪心算法进阶的相关题目解析。

文章目录

  • 135. 分发糖果
  • 406. 根据身高重建队列
  • 134. 加油站
  • 968. 监控二叉树

135. 分发糖果

题目链接

python">class Solution:def candy(self, ratings: List[int]) -> int:n = len(ratings)left = [1] * nfor i in range(1, n):if ratings[i] > ratings[i-1]:left[i] = left[i-1] + 1right = [1] * nres = left[n-1]for i in range(n - 2, -1, -1):if ratings[i] > ratings[i+1]:right[i] = right[i+1] + 1res += max(left[i], right[i])return res
  • 将同时考虑两侧的元素分解为左右两个规则:
    • 左规则:只考虑当前元素和其左侧的元素,使其满足题目要求
    • 右规则:只考虑当前元素和其右侧的元素,使其满足题目要求
  • 先从左至右遍历,获得满足左规则的序列;再从右至左遍历,获得满足右规则的序列;最后每个位置取两序列的最大值,累加即为答案

406. 根据身高重建队列

题目链接

python">class Solution:def reconstructQueue(self, people: List[List[int]]) -> List[List[int]]:people.sort(key=lambda x: (-x[0], x[1]))res = []for p in people:if p[1] < len(res):res.insert(p[1], p)else:res.append(p)return res
  • 先按照身高降序排序,然后按照排位升序排序,按照排序后的数组顺序处理,根据当前元素的排位在结果序列中动态插队(因为按身高降序排列后,比当前元素高的元素都已经被处理过且放入 res 中,而后续未处理的元素又比当前元素矮,不影响结果)

134. 加油站

题目链接

python">class Solution:def canCompleteCircuit(self, gas: List[int], cost: List[int]) -> int:cur_gas, sum_gas = 0, 0res = 0for i in range(len(gas)):cur_gas += gas[i] - cost[i]sum_gas += gas[i] - cost[i]if cur_gas < 0:res = i + 1cur_gas = 0return res if sum_gas >= 0 else -1
  • 从 0 号站点开始累加,一旦 cur_sum 小于零,则表示之前所有的站点都不可能作为起点,选择下一个位置作为新的起点,cur_sum 重新开始累加
  • sum_gas 在遍历过程中累计全程所有的油量,如果 sum_gas < 0 则表示不可能开完一圈,返回 -1。

968. 监控二叉树

题目链接

python">class Solution:def minCameraCover(self, root: Optional[TreeNode]) -> int:# 0 无覆盖 1 有覆盖 2 有摄像头def traversal(node: Optional[TreeNode]) -> int:if not node:return 1left = traversal(node.left)right = traversal(node.right)if left == 1 and right == 1:return 0if left == 0 or right == 0:nonlocal resres += 1return 2if left == 2 or right == 2:return 1res = 0val = traversal(root)if val == 0: res += 1  # 根结点无覆盖return res
  • 贪心准则:尽可能不要让覆盖的范围重合
  • 设置三个节点的状态:0 无覆盖;1 有覆盖;2 有摄像头
    • 两个子节点有任何一个为无覆盖的状态,则当前节点需要放置摄像头
    • 两个子节点有任何一个有摄像头,则当前节点为有覆盖状态
    • 两个子节点都有覆盖(说明是孙子节点的摄像头),则当前节点为无覆盖
  • 根据贪心准则,叶子结点是不需要放置摄像头的,因此将空节点返回的状态值设置为 1 有覆盖,这样叶子结点的状态值则为 0 无覆盖,满足算法要求
  • 最后判断根节点的状态,如果为无覆盖,则需要额外再放一个摄像头

http://www.ppmy.cn/server/165624.html

相关文章

景联文科技:专业数据采集标注公司 ,助力企业提升算法精度!

随着人工智能技术加速落地&#xff0c;高质量数据已成为驱动AI模型训练与优化的核心资源。据统计&#xff0c;全球AI数据服务市场规模预计2025年突破200亿美元&#xff0c;其中智能家居、智慧交通、医疗健康等数据需求占比超60%。作为国内领先的AI数据服务商&#xff0c;景联文…

吴恩达深度学习——卷积神经网络实例分析

内容来自https://www.bilibili.com/video/BV1FT4y1E74V&#xff0c;仅为本人学习所用。 文章目录 LeNet-5AlexNetVGG-16ResNets残差块 1*1卷积 LeNet-5 输入层&#xff1a;输入为一张尺寸是 32 32 1 32321 32321的图像&#xff0c;其中 32 32 3232 3232是图像的长和宽&…

面向智慧农业的物联网监测系统设计(论文+源码+实物)

1系统方案设计 根据系统功能的设计要求&#xff0c;展开面向智慧农业的物联网监测系统设计。如图2.1所示为系统总体设计框图。系统采用STM32单片机作为系统主控核心&#xff0c;利用YL-69土壤湿度传感器、光敏传感器实现农作物种植环境中土壤湿度、光照数据的采集&#xff0c;系…

基于PostGIS的省域空间相邻检索实践

目录 前言 一、相关空间检索函数 1、ST_touches函数 2、ST_Intersects函数 3、ST_Relate函数 4、区别于对比 二、空间相邻检索实践 1、省域表相关介绍 2、相关省域相邻查询 3、全国各省份邻居排名 三、总结 前言 在当今数字化时代&#xff0c;地理空间数据的高效管理…

自测|注意力机制的理解

自注意力机制 自注意力机制&#xff08;Self - Attention&#xff09;是Transformer架构中的核心组件&#xff0c;主要用于处理序列数据&#xff1a; 生成Q、K、V矩阵&#xff1a;对于输入序列&#xff08;假设长度为 n n n &#xff09;&#xff0c;首先通过三个不同的线性变…

蓝桥杯单片机(十)PWM脉宽调制信号的发生与控制

模块训练&#xff1a; 一、PWM基本原理 1.占空比 2.脉宽周期与占空比 当PWM脉宽信号的频率确定时&#xff0c;脉宽周期也确定了&#xff0c;此时改变占空比即可。当利用PWM脉宽周期改变LED灯的亮度时&#xff0c;灯是低电平亮&#xff0c;所以将低电平占空比改成10%即可实现…

后端生成二维码

QrConfig qrConfig new QrConfig(200, 200);private static void generateQrCode(QrConfig qrConfig, 你要塞入二维码的对象A a, 你要返回给前端的对象B b) {byte[] bytes QrCodeUtil.generatePng(A.getC(), qrConfig);// 转成base64String base64Png Base64.getEncoder().e…

荣誉|奇点云获评晶科能源“2024最佳大数据服务商”并受邀演讲

2025年1月10日&#xff0c;晶科能源控股有限公司“共筑数智梦 携手创未来”信息技术体系年度会议顺利举办。奇点云获评晶科能源“2024最佳大数据服务商”。StartDT COO、奇点云联合创始人刘莹受邀参会并作题为“面向增长的数据分析及AI创新”的演讲。 会上&#xff0c;刘莹简要…