¶综述
贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。
贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。
¶题库
¶984. String Without AAA or BBB
生成字符串没有‘aaa’和’bbb’。
1 | Input: A = 1, B = 2 |
¶860. Lemonade Change
柠檬找零,每人买一个柠檬,(价值5)可能付5, 10, 20面值的钞票,问零钱是否能找开。
1 | class Solution { |
¶55. Jump Game
跳跃游戏,数组中每个元素表示下一步的距离,问是否能跳到最后索引位置。
¶思路一
从倒数第一个开始,如果可以到最后一个,那么从这里截断,如果最后所剩只有一个元素,那么成功,反之失败
1 | Input: [2,3,1,1,4] |
¶思路二:
考虑每次更新可否到达当前位置
1 | class Solution { |
¶1029. Two City Scheduling
2N个人,分别去A,B两地,花费不同价格,要求A总共去N人,B也要去N人,总价最低:
1 | Input: [[10,20],[30,200],[400,50],[30,20]] |
¶1042. Flower Planting With No Adjacent
联通图染色问题,paths表示相邻的花园,相邻的花园中不能种同一种花,一种有四种花。
1 | class Solution { |
¶1090. Largest Values From Labels
给一个集合,每个元素有一个值values[i]
与标签labels[i]
。这里要选择一个子集,使得子集的元素个数不超过num_wanted
,而且相同标签的元素个数不超过use_limit
。求子集的最大和。
1 | Input: values = [5,4,3,2,1], labels = [1,1,2,2,3], num_wanted = 3, use_limit = 1 |
1 | class Solution { |
¶1094. Car Pooling
一辆车接旅客,根据旅客的人数,上下车位置,判断是否可以载完所有的旅客。
1 | Input: trips = [[2,1,5],[3,3,7]], capacity = 4 |
¶1282. Group the People Given the Group Size They Belong To
用户分组归属问题。
1 | Input: groupSizes = [3,3,3,3,3,1,3] |