给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每一个元素表明你在该位置能够跳跃的最大长度。判断你是否可以到达最后一个位置。例如对于[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