news 2026/4/15 20:45:25

day25-数据结构力扣

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
day25-数据结构力扣

134. 加油站

题目链接134. 加油站 - 力扣(LeetCode)

思路

虽然这个题看起来有点抽象

但是你仔细看一下他的示例,其实能明白

设每一站的净油量diff[i] = gas[i] - cost[i]

  1. 总判断如果所有diff加起来 < 0 →总油不够跑一圈,直接返回 -1

  2. 贪心找起点

    • 从某个起点出发,一路累加油箱油量

    • 一旦油箱 < 0:→ 说明从当前起点到这一站,所有点都不能做起点→ 直接把起点换成下一站,油箱清空重新算

  3. 题目保证:有解就唯一,最后剩下的起点就是答案。

提交

  • total = 整个旅途总共带的油够不够全程消耗

    • 不够 → 直接放弃

  • curr = 你现在车里还有多少油

    • 半路没油了 → 换个起点重新开

from typing import List class Solution: def canCompleteCircuit(self, gas: List[int], cost: List[int]) -> int: n = len(gas) total = 0 # 总净油量:判断能否跑完一圈 curr = 0 # 当前油箱油量 start = 0 # 记录起点 for i in range(n): diff = gas[i] - cost[i] total += diff curr += diff # 当前油不够,说明 [start, i] 都不能做起点 if curr < 0: start = i + 1 # 起点换成下一站 curr = 0 # 油箱清空 # 总油 >=0 才有解,否则 -1 return start if total >= 0 else -1

135. 分发糖果

题目链接135. 分发糖果 - 力扣(LeetCode)

思路

class Solution: def candy(self, ratings: List[int]) -> int: n=len(ratings) nums=[1]*n for i in range(n-1): if ratings[i]>ratings[i+1]: nums[i]+=1 elif ratings[i]<ratings[i+1]: nums[i+1]+=1 else: continue return sum(nums)

我是这样写的代码,但是题解说要两次遍历,我完全理解不了

通过18个用例

纯没事找事这个题

思路:

只遍历一次,只能处理 “一对邻居”,但题目需要 “连续一串” 都满足规则。

我知道遍历一次是错的,但是为什么要遍历两次还是不太懂

要满足左右两边都要比,必须遍历两次

第一次:左 → 右

只保证:如果右边 > 左边→ 右边糖果 = 左边糖果 + 1

第二次:右 → 左

只保证:如果左边 > 右边→ 左边糖果 = 右边糖果 + 1

最后每个位置取最大值

这样左右两边的规则都满足

提交

class Solution: def candy(self, ratings: List[int]) -> int: n = len(ratings) nums = [1] * n # 每人至少1颗 # 左→右:保证右边 > 左边时,糖更多 for i in range(1, n): if ratings[i] > ratings[i-1]: nums[i] = nums[i-1] + 1 # 右→左:保证左边 > 右边时,糖更多 for i in range(n-2, -1, -1): if ratings[i] > ratings[i+1]: nums[i] = max(nums[i], nums[i+1] + 1) return sum(nums)

860.柠檬水找零

题目链接860. 柠檬水找零 - 力扣(LeetCode)

思路

这个题还是可以理解,但是怎么做

如果现实生活让我给找零钱,就直接给

能不能维护一个数组就是我现在手上有的钱,然后一个一个加入,判断是否可以找零

class Solution: def lemonadeChange(self, bills: List[int]) -> bool: n=len(bills) nums=[] for i in range(n): if bills[i]==5: nums.append(bills[i]) elif bills[i]==10: count5=nums.count(5) if count5<1: return False else: nums.remove(5) nums.append(10) else: count5=nums.count(5) count10=nums.count(10) if count5>=3: nums.remove(5) nums.remove(5) nums.remove(5) nums.append(20) elif count10>=1 and count5>=1: nums.remove(10) nums.remove(5) nums.append(20) else: return False return True

通过了55个样例,还是写的有点复杂

思路:

只需要记录 5 美元、10 美元的数量

  • 收到 5 美元:不用找零,5 的数量 +1

  • 收到 10 美元:必须找 5 美元,5 的数量 -1,10 +1

  • 收到 20 美元:优先找 10+5,没有再找 3 张 5(因为 5 美元更通用,要省着用)

  • 任何一步找不开 → 直接 return False

提交

from typing import List class Solution: def lemonadeChange(self, bills: List[int]) -> bool: five = 0 # 只记5美元数量 ten = 0 # 只记10美元数量 for bill in bills: if bill == 5: five += 1 elif bill == 10: if five == 0: # 必须找5美元 return False five -= 1 ten += 1 else: # 20美元 # 优先用 10+5 找零(贪心) if ten > 0 and five > 0: ten -= 1 five -= 1 elif five >= 3: # 不行再用3张5 five -= 3 else: # 都不行 return False return True

406.根据身高重建队列

题目链接406. 根据身高重建队列 - 力扣(LeetCode)

思路

怎么说,光是看题就消耗了很多力气

  • 排序规则

    • 身高高的排前面(降序)

    • 身高一样:k 小的排前面(升序)

  • 构造规则

    • 按排好的顺序,把每个人插入到结果的第 k 个位置

    • 因为高的人已经先放好了,矮的人插进去不会影响别人的 k 值

  • 高的人先放好:后面插入矮个子,不会改变高个子的 k 值

  • 矮个子直接插到第 k 位:前面正好有 k 个比他高 / 等高的人

提交

from typing import List class Solution: def reconstructQueue(self, people: List[List[int]]) -> List[List[int]]: # 排序:身高从高到低,身高相同 k 小的在前 people.sort(key=lambda x: (-x[0], x[1])) res = [] # 按 k 的位置插入 for p in people: res.insert(p[1], p) return res
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 20:45:23

营养素微囊市场洞察:2026 - 2032年复合年均增长率(CAGR)为5.8%

据恒州诚思调研统计&#xff0c;2025年全球营养素微囊收入规模约达141.3亿元&#xff0c;到2032年这一规模将接近221.6亿元&#xff0c;2026 - 2032年复合年均增长率&#xff08;CAGR&#xff09;为5.8%。在食品行业追求产品品质升级、满足消费者多样化健康需求的当下&#xff…

作者头像 李华
网站建设 2026/4/15 20:45:11

如何高效使用fontTools:Python字体处理的完整指南

如何高效使用fontTools&#xff1a;Python字体处理的完整指南 【免费下载链接】fonttools A library to manipulate font files from Python. 项目地址: https://gitcode.com/gh_mirrors/fo/fonttools fontTools是一个功能强大的Python字体处理库&#xff0c;专门用于操…

作者头像 李华
网站建设 2026/4/15 20:43:12

conda环境下快速搞定CUDA 11.1和cuDNN 8.2.1的完美搭配(附版本匹配表)

Conda环境中深度学习环境配置&#xff1a;CUDA与cuDNN版本匹配实战指南 深度学习环境的配置一直是让初学者头疼的问题&#xff0c;尤其是CUDA和cuDNN的版本匹配。作为一名长期在多个项目中配置深度学习环境的开发者&#xff0c;我深刻理解这种困扰。本文将分享我在conda环境中配…

作者头像 李华
网站建设 2026/4/15 20:41:07

Python面试必备:30道高频笔试题深度解析与实战演练

1. Python基础概念高频考点解析 Python作为一门解释型语言&#xff0c;其基础概念是面试官最喜欢考察的"试金石"。我在面试新人时发现&#xff0c;超过60%的候选人会在基础题上栽跟头。让我们先看几个典型问题&#xff1a; 列表与元组的本质区别 不只是可变性这么简单…

作者头像 李华
网站建设 2026/4/15 20:38:11

AI知识管理:Notion模板实战——软件测试从业者的效率革命

在2026年的软件测试领域&#xff0c;知识管理已从辅助工具升级为核心竞争力引擎。随着AI技术的深度整合&#xff0c;传统测试方法面临用例版本混乱、经验资产流失和跨团队协作低效三重挑战。行业数据显示&#xff0c;测试工程师平均每周浪费4.7小时在信息检索与重复用例编写上&…

作者头像 李华
网站建设 2026/4/15 20:36:57

Halcon实战:5分钟搞定工业视觉直线度检测(附完整代码)

Halcon实战&#xff1a;工业视觉直线度检测的5分钟高效解决方案 在工业质检领域&#xff0c;直线度检测是评估机械部件几何精度的基础环节。传统卡尺、千分尺等接触式测量不仅效率低下&#xff0c;更难以应对批量生产场景。Halcon的metrology模型提供了一种非接触式、高精度的解…

作者头像 李华