文章目录

  • 一、柠檬水找零
  • 二、买卖股票的最佳时机
  • 三、买卖股票的最佳时机II
  • 四、分发饼干
  • 五、模拟行走机器人(困难)
  • 六、跳跃游戏
  • 七、跳跃游戏II(困难)

一、柠檬水找零

注意:是按顺序收取,不是先把所有钱都收上来,然后再给别人分别找钱

# 此题的贪心在于收到20,优先用10元的!
class Solution:def lemonadeChange(self, bills: List[int]) -> bool:five = ten = 0for i, v in enumerate(bills):if v == 5:five += 1elif v == 10:if not five:return Falsefive -= 1ten += 1else:if ten and five:ten -= 1five -= 1elif five >= 3:five -= 3else:return Falsereturn True

二、买卖股票的最佳时机

此题不涉及贪心

class Solution:def maxProfit(self, prices: List[int]) -> int:min_pri, max_pro = math.inf, 0for cur in prices:if cur < min_pri:min_pri = curmax_pro = max(max_pro, cur - min_pri)return max_pro# 最小栈 + 单调栈 (其实也就是变相的在维护min price)stack, max_pro = [], 0for cur in prices:if stack and cur > stack[-1]:max_pro = max(max_pro, cur - stack[-1])continuestack.append(cur)return max_pro

三、买卖股票的最佳时机II


# 此题的贪心在于:因为交易次数不受限,因此只要有利可图,就买了再抛售!
class Solution:def maxProfit(self, prices: List[int]) -> int:profit = 0for i in range(1, len(prices)):v = prices[i] - prices[i - 1]if v > 0:profit += vreturn profit

四、分发饼干

'''
为了尽可能满足最多数量的孩子,从贪心的角度考虑,应该按照孩子的胃口从小到大的顺序依次满足每个孩子
且对于每个孩子,应该选择可以满足这个孩子的胃口且尺寸最小的饼干
'''
class Solution:def findContentChildren(self, g: List[int], s: List[int]) -> int:g.sort()s.sort()i = j = count = 0while i < len(g) and j < len(s):if g[i] <= s[j]:count += 1i += 1j += 1else:j += 1return count

五、模拟行走机器人(困难)

此题没有贪心,并且此题的题难读懂!

注意:题目要求的是过程中各点到原点的欧式平方距离的最大值, 而不是终点到原点的欧式平方距离

某点到原点欧式平方距离:x*x+y*y

class Solution:def robotSim(self, commands: List[int], obstacles: List[List[int]]) -> int:# 四个方向的x,y应该怎么加减!# 这是按照顺时针方向写的,即向右转方向dx = [0, 1, 0, -1]dy = [1, 0, -1, 0]# x、y表示当前机器人的坐标,cur_dir表示当前机器人的面朝方向x = y = cur_dir = 0# map函数式编程,把obstacles中的元素作为参数传入tuple函数中去obstacleSet = set(map(tuple, obstacles)) ans = 0for cmd in commands:if cmd == -2:# 这里有人是(cur_dir + 3)%4,其实不用,因为-1%4就等于3cur_dir = (cur_dir - 1) % 4elif cmd == -1:cur_dir = (cur_dir + 1) % 4else:for _ in range(cmd):if (x + dx[cur_dir], y + dy[cur_dir]) not in obstacleSet:x += dx[cur_dir]y += dy[cur_dir]ans = max(ans, x*x + y*y)return ans

六、跳跃游戏

'''
1. 如果某一个作为 起跳点 的格子可以跳跃的距离是 3,那么表示后面 3 个格子都可以作为 起跳点。
2. 可以对每一个能作为 起跳点 的格子都尝试跳一次,把 能跳到最远的距离 不断更新。
3. 如果可以一直跳到最后,就成功了。
'''
# 此题贪心在于:
# 每个位置都计算自己能达到的最远距离,同时每个位置要判断自己是否可达
# 也就是本位置需要在当前最远能到达的距离中。
class Solution:def canJump(self, nums: List[int]) -> bool:maxPos = 0for i, jump in enumerate(nums):if maxPos >= i: # 此位置能到达,便更新最远位置maxPos = max(maxPos, i + jump)else:return Falsereturn True

七、跳跃游戏II(困难)

'''
由于题目中明确说了假设你总是可以到达数组的最后一个位置
假设没有这个要求,你恐怕就得考虑使用bfs!当然bfs我也做了,超出了时间间隔!如果我们「贪心」地进行正向查找,每次找到可到达的最远位置,就可以在线性时间内得到最少的跳跃次数。例如,对于数组 [2,3,1,2,4,2,3],初始位置是下标 0,从下标 0 出发,最远可到达下标 2。下标 0 可到达的位置中,下标 1 的值是 3,从下标 1 出发可以达到更远的位置,因此第一步到达下标 1。核心思想:肯定能达到最后一个位置,那么我们只管每一步都选择走的最远,局部最优,那么对于整体肯定也是最优的!即跳跃数最少,因此使用贪心算法程序在遍历的时候不断更新最远距离,难点在于怎么去标记不同层(借用bfs思想)
下面程序的level_end就是用来标记当前层结束的,结束了step++
'''
class Solution:def jump(self, nums: List[int]) -> int:# 贪心算法maxPos = level_end = step = 0# 不用考虑从最后一个位置起跳的情况,所以i < nums.size()-1for i in range(len(nums) - 1):# 由于肯定能到达数组最后一个位置,所以这里不用加 if maxPos >= i:maxPos = max(maxPos, i + nums[i])if i == level_end:level_end = maxPosstep += 1return step

贪心相关:柠檬水找零、买卖股票的最佳时机、分发饼干、跳跃游戏 ...相关推荐

  1. 笔记1 第11课 贪心初步 ——柠檬水找零,分发饼干,跳跃游戏,完成所有任务所需最小能量——极客时间算法

    之前收藏了极客时间的算法训练营3期 共21课,计划每一课写博客来记录学习,主要形式为 方法类型1 题1 题解 题2 题解 方法类型2 题1 题解 -- 题目大体来自leetcode 和 acwing ...

  2. Day32——122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II +第二天复习

    赶上进度,冲冲冲 目录 前言 一.买卖股票的最佳时机II 二.跳跃游戏 解题思路: 三.跳跃游戏|| 总结 前言 生命能与世俗相契合,才能不朽,生命的整体是象征的,因为他是有意义的. --<日瓦 ...

  3. 贪心算法|柠檬水找零

    题目描述 在柠檬水摊上,每一杯柠檬水的售价为 5 美元. 顾客排队购买你的产品,一次购买一杯. 每位顾客只买一杯柠檬水,然后向你付 5 美元.10 美元或 20 美元.必须给每个顾客正确找零 注意,一 ...

  4. 【LeetCode】两道贪心算法题目-455分发饼干,860柠檬水找零

    文章目录 第455题:分发饼干 第860题:柠檬水找零 第455题:分发饼干 题目描述 假设你是一位很棒的家长,想要给你的孩子们一些小饼干.但是,每个孩子最多只能给一块饼干.对每个孩子 i ,都有一个 ...

  5. 柠檬水找零---贪心算法(c++)实现

    来源:力扣 链接:https://leetcode.cn/problems/lemonade-change/ 题目详情: 在柠檬水摊上,每一杯柠檬水的售价为 5 美元. 顾客排队购买你的产品,(按账单 ...

  6. LeetCode24--种花问题和柠檬水找零

    1.种花问题 //假设有一个很长的花坛,一部分地块种植了花,另一部分却没有.可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去. // // 给你一个整数数组 flowerbed 表示花坛, ...

  7. LeetCode每日一题--860. 柠檬水找零(贪心)

    题目:跳转至 860. 柠檬水找零 在柠檬水摊上,每一杯柠檬水的售价为 5 美元. 顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯. 每位顾客只买一杯柠檬水,然后向你付 5 美元 ...

  8. Suzy想吃烤蛋挞了Day35 | 贪心算法进行时:860. 柠檬水找零,406. 根据身高重建队列,452. 用最少数量的箭引爆气球

    860. 柠檬水找零 solution 不要漏掉的一种情况是:如果收到了20,可以找10+5,或者5+5+5 class Solution:def lemonadeChange(self, bills ...

  9. LeetCode[860] 柠檬水找零 (贪心)

    PS: 本题目摘自 LeetCode 860 原题 柠檬水找零,一道贪心算法问题 题目描述 在柠檬水摊上,每一杯柠檬水的售价为 5 美元. 顾客排队购买你的产品,(按账单 bills 支付的顺序)一次 ...

最新文章

  1. 阿里JAVA面试题剖析:一般实现分布式锁都有哪些方式?使用 Redis 如何设计分布式锁?...
  2. jenkins docker 安装_docker 安装 Jenkins
  3. GDCM:将gz文件转dcm文件测试程序
  4. 改变能改变的,接受不能改变的
  5. 会议交流 | DataFunSummit 知识图谱在线峰会——链接知识图谱最前沿技术和最落地产业化应用的桥梁!...
  6. C++——常用取整方法
  7. python狗图像识别_使用pytorch完成kaggle猫狗图像识别方式
  8. PostgreSQL是否区分大小写
  9. dubbo的线程模型、派发策略、线程池策略
  10. huhamhire-hosts
  11. mysql varbinary blob_MySQL BIT、BINARY、VARBINARY、BLOB(二进制类型)
  12. linux系统pyodbc安装与使用教程
  13. 在 Windows 中保存和恢复桌面图标布局
  14. s5p4418的uboot网络无法使用问题解决
  15. Layui前端框架教程_layui视频教程_Layui使用教程
  16. CSS3开启硬件加速及利弊
  17. 有向加权图 最大弱连通分支_指数基金介绍专栏:指数基金的加权方式,你都知道哪些?...
  18. Python简单操作爬取微博热搜榜(表格.xls模式存储)
  19. 大白菜装机教程win10_详解戴尔电脑一键重装系统win10教程
  20. 【java学习】String字符串

热门文章

  1. C# 工具类分享(7~14)
  2. 农村信用贷款要具备什么条件,有哪些要求
  3. 日常瘦脸8个关键细节
  4. 微信运营必备!专业的微信粉丝和社群管理工具!功能强大好用,而且免费!
  5. java咖啡机如何清洗_这样清洗咖啡机最简单有效
  6. 2016年中国前1000名公众号最新报价
  7. c语言一行黑白相间的瓷砖,磁砖样式——第八届蓝桥杯C语言B组(国赛)第二题...
  8. = =大家一起黑马忠啊
  9. IOS取消“橡皮筋“效果
  10. python绘制一个圆当按下键盘的上下边缘会变大和变小_元贝驾考 模拟考