1.買賣股票的最佳時機
方法:
def MaxProfit(prices):max_pro, min_num = 0, float('inf')for num in prices:if num < min_num:min_num = nummax_pro = max(max_pro, num - min_num)return max_pro
2.跳躍游戲
問題:
給你一個非負整數數組?nums
?,你最初位于數組的?第一個下標?。數組中的每個元素代表你在該位置可以跳躍的最大長度。
判斷你是否能夠到達最后一個下標,如果可以,返回?true
?;否則,返回?false
?。
方法1:動態規劃
# 方法1:動態規劃:記錄每一個位置能否到達
def MaxProfit(nums):dp = [False] * len(nums)# 考慮首元素為0的情況if len(nums)==1 and nums[0]==0:return Trueelif nums[0]==0:return Falsedp[0] = Truefor i in range(len(nums)):# 如果能到達,開始跳躍if dp[i]:for j in range(1, nums[i]+1):if i+j < len(nums):dp[i+j] = Trueelse:return True# 不能到達,直接返回else:return Falsereturn dp[-1]
方法2:貪心算法:只關心最終能否到達(推薦)
# 方法2:貪心算法:只關心最終能否到達(最遠位置)(推薦)
def MaxProfit(nums):max_reach = 0for i in range(len(nums)):if max_reach < i: # 當前位置到不了return Falsemax_reach = max(max_reach, i + nums[i])return max_reach >= (len(nums)-1)