給定一個非負整數數組,你最初位於數組的第一個位置。數組中的每一個元素表明你在該位置能夠跳躍的最大長度。判斷你是否可以到達最後一個位置。例如對於[2,3,1,1,4]返回真,對於[3,2,1,0,4]返回假。python
貪心策略1:若是位置i能夠到達,那麼i以前的全部位置必定能夠到達。算法
def solution(nums): reach = 0 for i in range(len(nums)): if i > reach: return False reach = max(reach, i + nums[i]) return True
貪心策略2:向前遍歷記錄能夠到達終點的最前的位置。數組
def solution(nums): start = len(nums) - 1 for i in range(len(nums)-1, -1, -1): if i + nums[i] >= start: start = i return 0 == start
給定一個非負整數數組,你最初位於數組的第一個位置。數組中的每一個元素表明你在該位置能夠跳躍的最大長度。你的目標是使用最少的跳躍次數到達數組的最後一個位置。假設你老是能夠到達數組的最後一個位置。例如對於[2,3,1,1,4]返回2。cookie
貪心策略1:每一次記錄能到終點的最前的位置,並更新終點位置。設計
def solution(nums): aim = len(nums) - 1 cnt = 0 while aim: for i in range(len(nums)): if i + nums[i] >= aim: aim = i cnt += 1 break return cnt
貪心策略2:記錄位置i步長範圍內哪一個位置能到達的距離最遠,此步就走哪一個位置。code
def solution(nums): aim, edge, ans = 0, 0, 0 for i in range(len(nums)-1): aim = max(aim, i + nums[i]) if i == edge: ans += 1 edge = aim return ans
給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。設計一個算法來計算你所能獲取的最大利潤。你能夠儘量地完成更多的交易(屢次買賣一支股票)。你不能同時參與多筆交易(你必須在再次購買前出售掉以前的股票)。例如對於[7,1,5,3,6,4]返回7,對於[1,2,3,4,5]返回4。遊戲
貪心策略:只記錄上升段收益。leetcode
def solution(prices): profit = 0 for i in range(1, len(prices)): if prices[i] > prices[i-1]: profit += prices[i] - prices[i-1] return profit
在一個「平衡字符串」中,'L' 和 'R' 字符的數量是相同的。給出一個平衡字符串 s,請你將它分割成儘量多的平衡字符串。返回能夠經過分割獲得的平衡字符串的最大數量。例如對於"RLRRLLRLRL"返回4,對於"RLLLLRRRLR"返回3。字符串
貪心策略:遍歷到平衡狀態則結果加一。get
def solution(s): ans, balance = 0, 0 for i in s: balance += 1 if i == 'L' else -1 if not balance: ans += 1 return ans
假設你是一位很棒的家長,想要給你的孩子們一些小餅乾。可是,每一個孩子最多隻能給一塊餅乾。對每一個孩子 i ,都有一個胃口值 gi ,這是能讓孩子們知足胃口的餅乾的最小尺寸;而且每塊餅乾 j ,都有一個尺寸 sj 。若是 sj >= gi ,咱們能夠將這個餅乾 j 分配給孩子 i ,這個孩子會獲得知足。你的目標是儘量知足越多數量的孩子,並輸出這個最大數值。
貪心策略:優先知足胃口小的孩子。
def solution(g, s): g.sort() s.sort() i, j = 0, 0 while i < len(g) and j < len(s): if g[i] <= s[j]: i += 1 j += 1 return i