代码随想录NO31 |Leetcode 122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II

news/2024/10/30 9:33:34/

贪心之Leetcode122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II

今天是贪心第二天的了!

122.买卖股票的最佳时机II

给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。
在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。
返回你能获得的最大利润 。

思路:
本题中理解利润拆分是关键点! 不要整块的去看,而是把整体利润拆为每天的利润。
局部最优:收集每天的正利润,全局最优:求得最大利润。
局部最优可以推出全局最优,找不出反例,试一试贪心!

贪心:

class Solution:def maxProfit(self, prices: List[int]) -> int:nums = []for i in range(1,len(prices)):num = prices[i] - prices[i-1]if num > 0:nums.append(num)return sum(nums)

动态规划:

下一个章节

55. 跳跃游戏

给定一个非负整数数组 nums ,你最初位于数组的第一个下标
数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个下标。

贪心算法局部最优解:每次取最大跳跃步数(取最大覆盖范围),整体最优解:最后得到整体最大覆盖范围,看是否能到终点。

这道题目关键点在于:不用拘泥于每次究竟跳几步,而是看覆盖范围,覆盖范围内一定是可以跳过来的,不用管是怎么跳的。

class Solution:def canJump(self, nums: List[int]) -> bool:cover = 0# 边界情况if len(nums) == 1: return Truefor i in range(len(nums)):if  i <= cover:cover = max(cover, nums[i] + i)if cover >= len(nums) - 1: return Truereturn False
class Solution:def canJump(self, nums: List[int]) -> bool:cover = 0# 边界情况if len(nums) == 1: return Truei = 0while i <= cover:cover = max(cover, nums[i] + i)i += 1if cover >= len(nums) - 1: return Truereturn False

45.跳跃游戏II

给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。
每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处:

  • 0 <= j <= nums[i]
  • i + j < n

返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]。

class Solution:def jump(self, nums: List[int]) -> int:if len(nums) == 1:return 0curDistance, nextDistance = 0, 0step = 0for i in range(len(nums)-1):nextDistance = max(nextDistance, nums[i]+i)if i == curDistance:curDistance = nextDistancestep += 1return step

前两道题还算比较好理解,跳跃2有点绕啊!


http://www.ppmy.cn/news/21450.html

相关文章

UDP+有穷自动状态机构造网络指令系统

UDP有穷自动状态机构造网络指令系统 项目背景 某展厅的小项目&#xff0c;使用Unity制作了一个视频播放器&#xff0c;作为受控端&#xff0c;需要接收解说员手中的“PAD”或“触控屏电脑”等设备发来的控制指令。要求指令系统满足以下功能&#xff1a; 能够随意切换要播放的…

C++string的模拟实现(上篇)

目录 一.命名空间的封装与交换函数模板 1.命名空间的封装与类的定义 2.交换函数模板 二.string类的四个重要默认成员函数 1.构造函数的类外定义&#xff1a; 2.析构函数在类外的定义 3.拷贝构造函数在类外的定义 4.赋值运算符重载在类外的定义 5.关于两个string对象…

JAVA 同步锁

文章目录synchronizedsynchronized 作用当前对象synchronized 作用订单号条件synchronized 作用订单号字符串条件ReentrantLock 加 ConcurrentHashMap需求&#xff1a; 同一个订单才加同步锁&#xff0c;不同订单可并行synchronized synchronized是Java中的关键字&#xff0c;…

蓝桥杯算法训练合集九 1.计算税额2.数字统计3.删除字符串中的“*”4.2的次幂表示5.排序

目录 1.计算税额 2.数字统计 3.删除字符串中的“*” 4.2的次幂表示 5.排序 1.计算税额 问题描述 税务局希望你帮他们编写征税程序&#xff0c;该程序的功能是&#xff1a;首先输入某公司的年销售额sale和税率rate&#xff0c;然后程序将计算出相应的税额tax&#xff0c;并…

React之Diff算法

Diff算法概览 在beginWork中会使用Diff算法&#xff0c;对于Diff算法的本质是用来对比Current Fiber与JSX对象&#xff0c;来生成workInProgress Fiber。 对于Diff算法中&#xff0c;将两棵树完全比对的算法的复杂度为O(n3)&#xff0c;其中n是树中元素的数量&#xff0c;对于…

九龙证券|沪指收获2010年以来最强1月 北向资金净买入额刷新历史纪录

昨日&#xff0c;A股小幅调整&#xff0c;2023年1月行情随之收官。全体来看&#xff0c;1月A股商场拾级而上&#xff0c;盘面出现普涨格局&#xff0c;价值与生长风格均有亮眼体现。三大股指中&#xff0c;上证指数1月上涨5.39%&#xff0c;创2010年以来最佳局面。深证成指、创…

在产业互联网时代,以生态和边界为代表的有限市场的瓜分业已完成

在这样一个过程中&#xff0c;阿里们更多地思考的是&#xff0c;如何与产业结合&#xff0c;而非独立于产业之外&#xff0c;仅仅只是做一个旁观者和第三方。无论是它们投身到物流、制造、能源化工等行业之中&#xff0c;还是它们对这些产业的传统玩家们深度赋能&#xff0c;几…

windows系统使用Freeglut+glew库编写opengl程序(Mingw)

Freeglut glut是opengl实用工具集,由Mark Kilgrad所写。可以用来显示窗体,管理用户输入,字体,图像等操作,现在已经停止维护了,它的3.7版本是苹果电脑操作系统Mac OS 10.8(又名“美洲狮”)的opengl实用工具库的框架基础 使用更新的Freeglut替代glut,Freeglut是由Pawel…