【Day】LeetCode:134. 加油站,135. 分发糖果,860. 柠檬水找零,406. 根据身高重建队列

文章目录

  • [LeetCode:134. 加油站](#LeetCode:134. 加油站)
  • [LeetCode:135. 分发糖果](#LeetCode:135. 分发糖果)
  • [LeetCode:860. 柠檬水找零](#LeetCode:860. 柠檬水找零)
  • [LeetCode:406. 根据身高重建队列](#LeetCode:406. 根据身高重建队列)

LeetCode:134. 加油站

https://leetcode.cn/problems/gas-station/

思路

  1. 首先,计算每个加油站的净收益,得到全程的总剩余油量:
    (1)如果为负数,则总油量不足以支撑全程,返回 -1。
    (2)如果不为负数,则一定存在一个可行的起点。
  2. 初始化 cur_gas = 0 表示当前累计的剩余油量,start = 0 表示当前试探的起点。
    i = 0 开始遍历每个加油站,将 diff[i] 累加到 cur_gas
    (1)如果 cur_gas 始终非负,说明从当前起点出发能顺利到达当前位置。
    (2)如果 cur_gas < 0 ,意味着从起点到当前位置 i 这一段路程无法完成。此时,将起点设为 i + 1 ,并将 cur_gas 重置为 0,继续向后试探。
    原因 :说明此时起点 starti 的累计净收益为负。那么对于任意一个介于 starti 之间的点 k,从 k 出发到 i 的累计净收益也必然为负。因为从 startk 的累计净收益是非负的,否则在更早之前就会重置起点。】

解答

python 复制代码
class Solution:
    def canCompleteCircuit(self, gas: List[int], cost: List[int]) -> int:
        diff = [] # 记录每个加油站到下一个加油站剩余油的的净含量
        n = len(gas)

        gas_remain = 0

        for i in range(n):
            gas_remain += gas[i] - cost[i]
            diff.append(gas[i] - cost[i])
        
        if gas_remain < 0: # 如果所有加油站油小于总耗油量,则无法成环
            return -1

        cur_gas = 0
        start = 0

        for i in range(n):
            cur_gas += diff[i]
            if cur_gas < 0:
                start = i + 1
                cur_gas = 0
            
        return start

LeetCode:135. 分发糖果

https://leetcode.cn/problems/candy/description/

思路

通过两次遍历来满足条件。

  1. 每个孩子先发 1 颗糖果。
  2. 从左向右遍历:确保当右边孩子评分高于左边时,右边孩子的糖果数大于左边。
    ratings[i] > ratings[i-1] ,则 candies[i] = candies[i-1] + 1
  3. 从右向左遍历:确保当左边孩子评分高于右边时,左边孩子的糖果数大于右边。
    ratings[i] > ratings[i+1] ,则 candies[i] = max(candies[i], candies[i+1] + 1)

解答

python 复制代码
class Solution:
    def candy(self, ratings: List[int]) -> int:
        n = len(ratings)
        
        candies = [1] * n # 每个孩子至少1颗糖果
        
        # 从左到右
        for i in range(1, n):
            if ratings[i] > ratings[i-1]:
                candies[i] = candies[i-1] + 1
        
        # 从右到左
        for i in range(n-2, -1, -1):
            if ratings[i] > ratings[i+1]:
                candies[i] = max(candies[i], candies[i+1] + 1)
        
        return sum(candies)

LeetCode:860. 柠檬水找零

https://leetcode.cn/problems/lemonade-change/

思路

尽可能用 10 找零。如果找零时 5 不足,则无法找零。

解答

python 复制代码
class Solution:
    def lemonadeChange(self, bills: List[int]) -> bool:
        five = 0
        ten = 0
        for bill in bills:
            if bill == 5: # 收5,不用找零
                five += 1
            elif bill == 10: # 收10,只能用5找零
                five -= 1
                ten += 1
            else: # 收20,可以用5、10找零,优先用10
                if ten > 0:
                    five -= 1
                    ten -= 1
                else:
                    five -= 3
            
            if five < 0: # 改顾客无法找零
                return False
        
        return True

LeetCode:406. 根据身高重建队列

https://leetcode.cn/problems/queue-reconstruction-by-height/

思路

  1. 先将 people 按照身高降序、k升序排列。
  2. 遍历排序后的 people,对于每个人 [h, k],将其插入到 queue 的索引 k 处。因为此时 queue 中已有的所有人身高都 >= 当前人的身高,所以当前人插入到位置 k 后,他前面正好有 k 个人身高都 >= 他。

解答

python 复制代码
class Solution:
    def reconstructQueue(self, people: List[List[int]]) -> List[List[int]]:
        people.sort(key=lambda x: (-x[0], x[1])) # 身高降序,k升序
        queue = []
        for p in people:
            # 插入到索引 p[1] 的位置
            queue.insert(p[1], p)
        return queue
相关推荐
醉城夜风~8 分钟前
手撕 C++ string:从零实现一个简易字符串类
开发语言·c++·算法
测试秃头怪11 分钟前
postman接口测试详解
自动化测试·软件测试·python·测试工具·测试用例·接口测试·postman
手写码匠14 分钟前
华为云Flexus+DeepSeek征文|DeepSeek+RAG知识库实战:基于Flexus X实例与Dify构建企业级智能问答系统
人工智能·深度学习·算法·aigc
小白的后端世界20 分钟前
LangChain 模型创建与调用实战:从 init_chat_model 到企业级多模型接入
人工智能·python·langchain
Zane199428 分钟前
copy 和 deepcopy 到底在拷贝什么?一文讲清赋值、浅拷贝、深拷贝的引用关系
后端·python
AC赳赳老秦28 分钟前
软著公开信息批量采集:OpenClaw 抓取软件著作权公开数据,分析企业技术布局方向
大数据·网络·人工智能·python·php·deepseek·openclaw
zhiSiBuYu051734 分钟前
Flask 路由新手入门与实战指南
后端·python·flask
qq_225891746636 分钟前
基于Python的城市内涝积涝监测数据可视化分析系统
后端·python·信息可视化·数据分析·django
benben04437 分钟前
大模型之基于PEFT的SFT微调实战篇
开发语言·python
淼澄研学1 小时前
PyTorch深度学习实战:5个核心方法从0到1构建神经网络
前端·数据库·python