LeetCode题集整理- 贪心算法

1、贪心算法简介

  • 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。

  • 贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。

举例说明

  • 1: 对于人民币的面值有1元 5元 10元 20元 50元 100元,下面要求设计一个程序,输入找零的钱,输出找钱方案中最少张数的方案。
LeetCode题集整理- 贪心算法_第1张图片
  • 2、已知一些孩子和一些糖果,每个孩子有需求因子g,每个糖果有大小s,当某个糖果的大小s >=某个孩子的需求因子g时,代表该糖果可以满足该孩子;求使用这些糖果,最多能满足多少孩子?(注意,某个孩子最多只能用1个糖果满足)。
    • 例如,需求因子数组g = [5, 10, 2, 9, 15, 9];糖果大小数组s = [6, 1, 20, 3, 8];最多可以满足3个孩子。

    • 思路:

      • 某个糖果如果不能满足某个孩子,则该糖果也一定不能满足需求因子更大的孩子。
      • 某个孩子可以用更小的糖果满足,则没必要用更大糖果满足,因为可以保留更大的糖果满足需求因子更大的孩子。
    • 孩子的需求因子更小则其更容易被满足,故优先从需求因子小的孩子尝试,用某个糖果满足一个较大需求因子的孩子或满足一个较小需求因子的孩子效果是一样的(最终满足的总量不变)。

LeetCode题集整理- 贪心算法_第2张图片
  • 3、一个整数序列,如果两个相邻元素的差恰好正负(负正)交替出现,则该序列被称为摇摆序列。一个小于2个元素的序列直接为摇摆序列。
    • 例如:序列[1, 7, 4, 9, 2, 5],相邻元素的差(6, -3, 5, -7, 3),该序列为摇摆序列。
    • 序列[1,4,7,2,5](3, 3, -5, 3)、[1,7,4,5,5] (6, -3, 1, 0)不是摇摆序列。
      给一个随机序列,求这个序列满足摇摆序列定义的最长子序列的长度。
      一个整数序列,如果两个相邻元素的差恰好正负(负正)交替出现,则该序列被称为摇摆序列。一个小于2个元素的序列直接为摇摆序列。
    • 例如:序列[1, 7, 4, 9, 2, 5],相邻元素的差(6, -3, 5, -7, 3),该序列为摇摆序列。
    • 序列[1,4,7,2,5](3, 3, -5, 3)、[1,7,4,5,5] (6, -3, 1, 0)不是摇摆序列。给一个随机序列,求这个序列满足摇摆序列定义的最长子序列的长度。例如:输入[1,7,4,9,2,5],结果为6;输入[1,17,5,10,13,15,10,5,16,8],结果为7([1,17,10,13,10,16,8] );输入[1,2,3,4,5,6,7,8,9],结果为2。
LeetCode题集整理- 贪心算法_第3张图片
LeetCode题集整理- 贪心算法_第4张图片
LeetCode题集整理- 贪心算法_第5张图片

241天以来,Java架构更新了 602个主题,已经有100+位同学加入。微信扫码关注java架构,获取Java面试题和架构师相关题目和视频。上述相关面试题答案,尽在Java架构中。

你可能感兴趣的:(LeetCode题集整理- 贪心算法)