122.买卖股票的最佳时机II
思路挺难想到的,代码却很简单
class Solution:
def maxProfit(self, prices: List[int]) -> int:
result = 0
for i in range(1, len(prices)):
result += max(prices[i]-prices[i-1], 0)
return result
55. 跳跃游戏
这道题目关键点在于:不用拘泥于每次究竟跳几步,而是看覆盖范围,覆盖范围内一定是可以跳过来的,不用管是怎么跳的。
python语言使用range的写法是错误的,因为python不支持动态修改for循环中变量,使用while循环代替
错误的写法
class Solution:
def canJump(self, nums: List[int]) -> bool:
cover = 0
for i in range(cover+1): # 注意这里是cover
cover = max(cover, i+nums[i])
if cover >= len(nums)-1:
return True
return False
正确的写法
class Solution:
def canJump(self, nums: List[int]) -> bool:
cover = 0
i = 0
while i <= cover: # 注意这里是cover
cover = max(cover, i+nums[i])
if cover >= len(nums)-1:
return True
i += 1
return False
45.跳跃游戏II
思路很巧妙
class Solution:
def jump(self, nums: List[int]) -> int:
if len(nums) == 1:
return 0
result = 0
cur_cover = 0
next_cover = 0
for i in range(len(nums)):
next_cover = max(nums[i] + i, next_cover)
if i == cur_cover:
result += 1
cur_cover = next_cover
if cur_cover >= len(nums) - 1:
break
return result