力扣链接:https://leetcode-cn.com/problems/assign-cookies/submissions/
本题非常简单,可我的代码时间复杂度是O(n^2),写得很烂,我的代码如下:
class Solution {
public int findContentChildren(int[] g, int[] s) {
if(s.length == 0)
return 0;
Arrays.sort(g);
Arrays.sort(s);
int result = 0;
for(int i = 0; i<g.length; i++){
// System.out.print(g[i] + " ");
for(int j = 0; j<s.length; j++){
if(g[i] <= s[j]){
result++;
s[j] = 0;
break;
}
}
}
return result;
}
}
代码随想录中提供了两种时间复杂度为O(n)的算法可供参考:
class Solution {
// 思路1:优先考虑饼干,小饼干先喂饱小胃口
public int findContentChildren(int[] g, int[] s) {
Arrays.sort(g);
Arrays.sort(s);
int start = 0;
int count = 0;
for (int i = 0; i < s.length && start < g.length; i++) {
if (s[i] >= g[start]) {
start++;
count++;
}
}
return count;
}
}
class Solution {
// 思路2:优先考虑胃口,先喂饱大胃口
public int findContentChildren(int[] g, int[] s) {
Arrays.sort(g);
Arrays.sort(s);
int count = 0;
int start = s.length - 1;
// 遍历胃口
for (int index = g.length - 1; index >= 0; index--) {
if(start >= 0 && g[index] <= s[start]) {
start--;
count++;
}
}
return count;
}
}