122.买卖股票的最佳时机II
题目描述: 122.买卖股票的最佳时机II.
解法
贪心
class Solution(object):
def maxProfit(self, prices):
max_profit = 0
for i in range(1,len(prices)):
profit = prices[i] - prices[i-1]
if profit > 0:
max_profit += profit
return max_profit
目前来看贪心算法可以将问题最小化,然后再扩大整体范围。那么买卖股票的最小范围就是某一天和这一天的后一天。那就可以考虑每一天是否能挣钱就行了,只要后一天的价格比当天的价格高,那就前一天买入,后一天卖出即可,把能赚钱的一小天扩大到整个时间范围内即可。
55. 跳跃游戏
题目描述: 55. 跳跃游戏.
解法
贪心
class Solution(object):
def canJump(self, nums):
max_length = 0
for i,num in enumerate(nums):
if i > max_length:
return False
max_length = max(max_length,i+num)
if max_length >= len(nums) - 1:
return True
只需要考虑每一步最多能走到哪里就行,如果最多走到的位置无法达到当前的这一步开始的地方,那就直接return False
45.跳跃游戏II
题目描述: 45.跳跃游戏II.
解法
贪心
class Solution(object):
def jump(self, nums):
if len(nums) == 1:
return 0
count = 0
max_place = 0
new_max_place = 0
for i,num in enumerate(nums):
new_max_place = max(new_max_place,i+num)
if i == max_place:
max_place = new_max_place
count += 1
if max_place >= len(nums) - 1:
break
return count
只要记录每个阶段的最大边界范围,然后在这个阶段遍历的时候寻找下一个阶段的最大范围,注意边界情况