leetcode刷题-贪心03

代码随想录贪心算法part03|134. 加油站、135. 分发糖果、860.柠檬水找零、406.根据身高重建队列

  • 134. 加油站【太牛了】
  • 135. 分发糖果
  • 860.柠檬水找零
  • 406.根据身高重建队列

134. 加油站【太牛了】

leetcode题目链接
代码随想录文档讲解

思路

两个数组:
gas
cost
diff(当前站点的的累计剩余油量)
新建变量:currsum,一旦它小于0,就从它的下一个站点开始重新记,因为这个站点前面的currsum是大于0的,舍弃前面的站点不会起作用,即前面哪一个站点作为起始站点都不行,尝试i+1。
视频有一堆很牛的反证法证明了我疑惑的地方(区间1+区间2<0,但区间1<0,区间2>0,这个时候已经选取区间1后的第一个位置作为起始点了,而不是区间2后的第一个位置,符合解题逻辑)

python代码

class Solution:def canCompleteCircuit(self, gas: List[int], cost: List[int]) -> int:currsum, totalsum, index = 0, 0, 0for i in range(len(gas)):currsum += gas[i] - cost[i]totalsum += gas[i] - cost[i]if currsum < 0:index = i + 1currsum = 0if totalsum < 0:return -1else:return index

135. 分发糖果

leetcode题目链接
代码随想录文档讲解

左右分别判断

class Solution:def candy(self, ratings: List[int]) -> int:candy = [1 for i in range(len(ratings))]for i in range(1, len(ratings)):if ratings[i] > ratings[i-1]:candy[i] = candy[i-1] + 1for i in range(len(ratings)-2, -1, -1):if ratings[i] > ratings[i+1]:candy[i] = max(candy[i], candy[i+1] + 1)return sum(candy)

860.柠檬水找零

leetcode题目链接
代码随想录文档讲解

贪心策略:优先用大的钞票找零
情况1: 支付5元
情况2: 支付10元(找零5元)
情况3: 支付20元(两种找零策略,优先使用10元+5元)

class Solution:def lemonadeChange(self, bills: List[int]) -> bool:five, ten, twenty = 0, 0, 0for bill in bills:if bill == 5:five += 1if bill == 10:if five <= 0:return Falseelse:ten += 1five -= 1if bill == 20:if ten > 0 and five > 0:ten -= 1five -= 1twenty += 1elif five >= 3:five -= 3twenty += 1else:return Falsereturn True

406.根据身高重建队列

leetcode题目链接
代码随想录文档讲解

与分发糖果类似,本题也有两个维度:h、k,先确定一个维度再确定另一个维度
先从大到小排序h,确定好身高顺序,再遍历检查k,让队列满足k的熟悉(将身高小的插入到前面,这样也不会影响身高大的的位置)

使用python的sorted函数,使用lambda表达式,key确定排序依据,例如:

# 假设这是你的列表
my_list = [[1, 5], [3, 2], [4, 8], [2, 3]]# 根据每个小列表的第二个数字降序排序
sorted_list = sorted(my_list, key=lambda x: x[1], reverse=True)print(sorted_list)

在写按照k进行排序插入的代码时也不用再计算应该插入的位置,其实就是插入到第k个位置,因为已经排好序了,这里又蠢了呜呜

class Solution:def reconstructQueue(self, people: List[List[int]]) -> List[List[int]]:# 先按照h维度的身高顺序从高到低排序。确定第一个维度# lambda返回的是一个元组:当-x[0](维度h)相同时,再根据x[1](维度k)从小到大排序people.sort(key=lambda x: (-x[0], x[1]))que = []# 根据每个元素的第二个维度k,贪心算法,进行插入# people已经排序过了:同一高度时k值小的排前面。for p in people:que.insert(p[1], p)return que

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

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

相关文章

基于SpringBoot电脑组装系统平台系统功能实现六

一、前言介绍&#xff1a; 1.1 项目摘要 随着科技的进步&#xff0c;计算机硬件技术日新月异&#xff0c;包括处理器&#xff08;CPU&#xff09;、主板、内存、显卡等关键部件的性能不断提升&#xff0c;为电脑组装提供了更多的选择和可能性。不同的硬件组合可以构建出不同类…

【某大厂一面】数组和链表区别

在 Java 中&#xff0c;数组&#xff08;Array&#xff09;和链表&#xff08;LinkedList&#xff09;是两种常见的数据结构&#xff0c;它们在存储和操作方式上有显著的区别。了解它们的差异有助于选择适合特定应用场景的结构。下面是数组和链表之间的详细比较。 1. 存储结构…

网络工程师 (5)系统可靠性

前言 系统可靠性是指系统在规定的条件和规定的时间内&#xff0c;完成规定功能的能力。这种能力不仅涵盖了系统本身的稳定性和耐久性&#xff0c;还涉及了系统在面对各种内外部干扰和故障时的恢复能力和容错性。系统可靠性是评价一个系统性能优劣的关键指标之一&#xff0c;对于…

【2024年华为OD机试】(C卷,200分)- 推荐多样性 (JavaScriptJava PythonC/C++)

一、问题描述 问题描述 我们需要从多个已排序的列表中选取元素&#xff0c;以填充多个窗口。每个窗口需要展示一定数量的元素&#xff0c;且元素的选择需要遵循特定的穿插策略。具体来说&#xff0c;我们需要&#xff1a; 从第一个列表中为每个窗口选择一个元素&#xff0c;…

C# 提取PDF表单数据

目录 使用工具 C# 提取多个PDF表单域的数据 C# 提取特定PDF表单域的数据 PDF表单是一种常见的数据收集工具&#xff0c;广泛应用于调查问卷、业务合同等场景。凭借出色的跨平台兼容性和标准化特点&#xff0c;PDF表单在各行各业中得到了广泛应用。然而&#xff0c;当需要整合…

http://noi.openjudge.cn/——4.2算法之数论——2419:Coins

题目 总时间限制: 1000ms 内存限制: 131072kB 描述 Snoopy has three coins. One day he tossed them on a table then and tried to flip some of them so that they had either all heads or all tails facing up. After several attempts, he found that regardless of the…

损失函数 Loss Function

分类问题和回归问题常使用的损失函数如下&#xff1a; 分类问题 交叉熵损失函数&#xff08;Cross-Entropy Loss&#xff09;&#xff1a;用于衡量两个概率分布之间的差异&#xff0c;在多分类问题中广泛应用。 ce_loss nn.CrossEntropyLoss() 回归问题 均方误差损失函数&…

3.日常英语笔记

screening discrepancies 筛选差异 The team found some screening discrepancies in the data. 团队在数据筛选中发现了些差异。 Don’t tug at it ,or it will fall over and crush you. tug 拉&#xff0c;拽&#xff0c;拖 He tugged the door open with all his might…

解析“in the wild”——编程和生活中的俚语妙用

解析“in the wild”——编程和生活中的俚语妙用 看下面的技术文章中遇到 in the wild这个词&#xff0c;想要研究一下&#xff0c;遂产生此文。 Are there ever pointers to pointers to pointers? There is an old programming joke which says you can rate C programmers…

软件测试丨从自动化软件测试到自主测试,还差几步?

在当今万物互联、信息爆炸的时代&#xff0c;软件测试的角色显得越发重要。作为软件开发生命周期&#xff08;SDLC&#xff09;中的关键环节&#xff0c;测试不仅仅是保障软件质量的工具&#xff0c;更是推动产品迭代的助推器。随着自动化测试技术的崛起&#xff0c;测试开发变…

高阶C语言|深入理解字符串函数和内存函数

文章目录 前言1.求字符串长度1.1 字符串长度函数&#xff1a;strlen模拟实现 长度不受限制的字符串函数1.2 字符串拷贝函数&#xff1a;strcpy模拟实现 1.3 字符串连接函数&#xff1a;strcat模拟实现 1.4 字符串比较函数&#xff1a;strcmp模拟实现 长度受限制的字符串函数2.1…

Golang Ticker Reset异常的坑

前言 延迟执行的场景我们通常会使用time.NewTimer(…)来实现&#xff0c;当一些场合可能需要使用timer.Reset(…)方法修改超时时间&#xff0c;这时使用要多注意&#xff0c; 使用不当会导致Reset失败&#xff0c;或是重复执行两次的情况。 复现 下面这段代码我们是希望&…

Chameleon(变色龙) 跨平台编译C文件,并一次性生成多个平台的可执行文件

地址:https://github.com/MartinxMax/Chameleon Chameleon 跨平台编译C文件&#xff0c;并一次性生成多个平台的可执行文件。可以通过编译Chameleon自带的.C文件反向Shell生成不同平台攻击载荷。 登录 & 代理设置 按照以下步骤设置 Docker 的代理&#xff1a; 创建配置目…

DFFormer实战:使用DFFormer实现图像分类任务(二)

文章目录 训练部分导入项目使用的库设置随机因子设置全局参数图像预处理与增强读取数据设置Loss设置模型设置优化器和学习率调整策略设置混合精度&#xff0c;DP多卡&#xff0c;EMA定义训练和验证函数训练函数验证函数调用训练和验证方法 运行以及结果查看测试完整的代码 在上…

几种K8s运维管理平台对比说明

目录 深入体验**结论**对比分析表格**1. 功能对比****2. 用户界面****3. 多租户支持****4. DevOps支持** 细对比分析1. **Kuboard**2. **xkube**3. **KubeSphere**4. **Dashboard****对比总结** 深入体验 KuboardxkubeKubeSphereDashboard 结论 如果您需要一个功能全面且适合…

DeepSeek API 的获取与对话示例

代码文件下载&#xff1a;Code 在线链接&#xff1a;Kaggle | Colab 文章目录 注册并获取API环境依赖设置 API单轮对话多轮对话流式输出更换模型 注册并获取API 访问 https://platform.deepseek.com/sign_in 进行注册并登录&#xff1a; 新用户注册后将赠送 10 块钱余额&#…

Vue 3 + TypeScript 实现父子组件协同工作案例解析

引言 在现代的前端开发中&#xff0c;Vue.js 作为一款流行的渐进式 JavaScript 框架&#xff0c;为我们构建交互式用户界面提供了强大的支持。Vue 3 的推出带来了许多新特性&#xff0c;尤其是组合式 API 的引入&#xff0c;让代码的组织和复用更加灵活。同时&#xff0c;TypeS…

基于STM32的循迹小车设计与实现

1 系统方案设计 根据系统设计功能&#xff0c;展开基于STM32的循迹小车设计&#xff0c;整体设计框图如图2.1所示。系统采用STM32单片机作为控制器,通过L298驱动器控制两个直流电机实现对小车的运动控制&#xff0c;两路红外模块实现黑线的检测&#xff0c;HC-SR04超声波模块实…

14.模型,纹理,着色器

模型、纹理和着色器是计算机图形学中的三个核心概念&#xff0c;用通俗易懂的方式来解释&#xff1a; 1. 模型&#xff1a;3D物体的骨架 通俗解释&#xff1a; 模型就像3D物体的骨架&#xff0c;定义了物体的形状和结构。 比如&#xff0c;一个房子的模型包括墙、屋顶、窗户等…

Docker/K8S

文章目录 项目地址一、Docker1.1 创建一个Node服务image1.2 volume1.3 网络1.4 docker compose 二、K8S2.1 集群组成2.2 Pod1. 如何使用Pod(1) 运行一个pod(2) 运行多个pod 项目地址 教程作者&#xff1a;教程地址&#xff1a; https://www.bilibili.com/video/BV1Zn4y1X7AZ?…