贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。 也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。
455. 分发饼干
思路
这道题目给了我们两组array,一组代表小朋友的胃口值,另一组代表曲奇饼干的大小。
我们要分发曲奇给尽可能多的小朋友,并且曲奇饼干的大小要满足小朋友的胃口。
所以,最好给孩子们分配与他胃口最接近的饼干。
不能把大的曲奇去满足很小胃口的小朋友,除非没有选择。尽可能的去把小曲奇发给小胃口的小朋友。
关键点:把两个array 重新排列,从小到大。
方法1:10ms 100%
对两个数组进行排序并使用两个指针。O(nlogn)
// 10ms
class Solution {
public int findContentChildren(int[] g, int[] s) {
Arrays.sort(g);
Arrays.sort(s);
int pointG = 0;
int pointS = 0;
while (pointG < g.length && pointS < s.length) {
if (g[pointG] <= s[pointS]) {
pointG++;
pointS++;
}
else {
pointS++;
}
}
return pointG;
}
}
方法2:16ms 38%
常规循环两个数组遍历,无指针,效率慢
class Solution {
public int findContentChildren(int[] g, int[] s) {
int count=0;
Arrays.sort(g);
Arrays.sort(s);
int j=0;
for(int i=0; i<g.length; i