[基础算法系列] —— 贪心算法之力扣热度TOP5贪心策略记录

TOP1 跳跃游戏

给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。

例如对于[2,3,1,1,4]返回真,对于[3,2,1,0,4]返回假。

贪心策略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

TOP2 跳跃游戏Ⅱ

给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。假设你总是可以到达数组的最后一个位置。

例如对于[2,3,1,1,4]返回2。

贪心策略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步长范围内哪个位置能到达的距离最远,此步就走哪个位置。

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

TOP3 买卖股票的最佳时机II

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

例如对于[7,1,5,3,6,4]返回7,对于[1,2,3,4,5]返回4。

贪心策略:只记录上升段收益。

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

TOP4 分割平衡字符串

在一个「平衡字符串」中,'L' 和 'R' 字符的数量是相同的。给出一个平衡字符串 s,请你将它分割成尽可能多的平衡字符串。返回可以通过分割得到的平衡字符串的最大数量。

例如对于"RLRRLLRLRL"返回4,对于"RLLLLRRRLR"返回3。

贪心策略:遍历到平衡状态则结果加一。

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

TOP5 分发饼干

假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 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

你可能感兴趣的:(算法)