代码随想录算法训练营第三十二天| 122.买卖股票的最佳时机II、55.跳跃游戏 、45.跳跃游戏II
题目
122.买卖股票的最佳时机II
给你一个整数数组 prices
,其中 prices[i]
表示某支股票第 i
天的价格。
在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。
返回 你能获得的 最大 利润 。
python
class Solution:
def maxProfit(self, prices: List[int]) -> int:
sum_ = 0
for i in range(1, len(prices)):
lirun = prices[i] - prices[i - 1]
if lirun > 0:
sum_ += lirun
return sum_
题目
55.跳跃游戏
给你一个非负整数数组 nums
,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个下标,如果可以,返回 true
;否则,返回 false
。
python
class Solution:
def canJump(self, nums: List[int]) -> bool:
can_reach = [False] * len(nums)
can_reach[0] = True
for i in range(len(nums) - 1):
if can_reach[i]:
for j in range(nums[i]):
if i + j + 1 == len(nums):
return True
can_reach[i+j+1] = True
return can_reach[len(nums) - 1]
题目
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]
。
python
class Solution:
def jump(self, nums: List[int]) -> int:
step = 0
if len(nums) < 2:
return step
cover_max = 0
cur = 0
while cur <= cover_max:
for cur in range(cur, cover_max + 1):
cover_max = max(cover_max, nums[cur] + cur)
if cover_max >= len(nums) - 1:
return step + 1
step += 1