455-Assign Cookies
思路:给孩子和饼干排序,一个数组记录饼干是否已经发放,一个flag计数,对每个孩子从前往后寻找最先满足这个孩子的饼干,找到了就flag++,并将该饼干标志改为已发放。 问题:时间复杂度太高,但是没想到其他解法,第一次做题累了。 代码:
class Solution {
public int findContentChildren(int[] g, int[] s) {
int a = g.length;
int b = s.length;
int m = 0;
Arrays.sort(g);
Arrays.sort(s);
int flag[] = new int[b];
for (int i = 0; i < a; i++) {
for (int j = 0; j < b; j++) {
if(s[j] >= g[i] && flag[j]==0){
m++;
flag[j] = 1;
break;
}
}
}
return m;
}
}
总结:
- 不要一需要循环就想for循环,也要思考while和dowhile会不会更简单。
- 当有两个下标根据不同的条件,不同步进,可以把下标定义为循环外,用while循环(下标不越界的情况下),不同情况不同的下标步进方式.
- 数组排序用Arrays.sort(g);
修改代码:
class Solution {
public int findContentChildren(int[] g, int[] s) {
int a = g.length;
int b = s.length;
int m = 0;
Arrays.sort(g);
Arrays.sort(s);
int child = 0;
int pie = 0;
while(child<a && pie<b){
if (s[pie]>=g[child]){
child++;
}
pie++;
}
return child;
}
}
|