leedcode455-分发饼干
1、贪心思想:给胃口值最小的朋友分配能满足胃口值的最小尺寸的饼干。
2、步骤:
- 先对胃口值和饼干尺寸进行排序;
- 遍历胃口值和饼干尺寸:如果胃口值小于等于饼干尺寸,将这块饼干分给小朋友i,继续遍历下一个胃口值和饼干尺寸;如果胃口值大于饼干尺寸,遍历下一个饼干。
- 返回被满足的小朋友数量
leedcode135-分发糖果
1、规则:评分高于两边孩子的孩子获得糖果数应该高于相邻孩子。
2、步骤:
- 先从左往右遍历,通过贪心原则使学生满足左规则。
- 然后再从右往左遍历,满足右规则。
leedcode435-无重叠区间
题目:给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。
注意:可以认为区间的终点总是大于它的起点;区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。
题解:
1、选择哪个区间作为首个区间?
我们可以不断地寻找右端点在首个区间右端点左侧的新区间,将首个区间替换成该区间。那么当我们无法替换时,首个区间就是所有可以选择的区间中右端点最小的那个区间。
因此我们将所有区间按照右端点从小到大进行排序,那么排完序之后的首个区间,就是我们选择的首个区间。(有多个右端点相同的区间时,任意选择一个,与左端点无关)
2、当确定了首个区间之后,所有与首个区间不重合的区间就组成了一个规模更小的子问题。只要找出其中与首个区间不重合并且右端点最小的区间即可。用相同的方法,我们可以依次确定后续的所有区间。
补充知识点:
1、lambda匿名函数:
[capture_block] (parameters) mutable exception_specification->return_type{ body }
捕捉块(catpure block): 指定如何捕捉所在作用域中的变量,并供给lambda主体使用。 [=]:通过值捕捉所有变量 [&]:通过引用捕捉所有变量
参数(parameter): (可选)lambda表达式使用的参数列表。
mutable:(可选)如果所在作用域的变量是通过值捕捉到,那么lambda表达式主体中可以使用这些变量的副本。
exception_specification:(可选)用于指定lambda可以抛出的异常。
return_type:(可选)返回值的类型。
- 如果忽略了return_type,那么编译器会根据以下原则判断返回类型:
- 如果lambda表达式主体的形式为{return expression;}那么表达式return_type的类型为expression的类型。
- 其他情况下的return_type为void。
2、sort函数
包含在#include<algorithm>
中
sort(start,end,排序方法):
- start:要排序的数组的起始地址
- end:结束的地址(最后一位要排序的地址)
- 可以不写第三个参数,默认从小到大排序