问题描述
解题思路
贪心策略
对饥饿值和胃口值排序,然后逐个尝试以满足胃口
我的题解
正确解
class Solution {
public int findContentChildren(int[] g, int[] s) {
//g是孩子//s是饼干
int count=0;
for(int i=0;i<g.length;i++){
for(int j=i;j<g.length;j++){
if(g[i]>g[j]){
int temp =g[i];
g[i] = g[j];
g[j] = temp;
}
}
}
for(int i=0;i<s.length;i++){
for(int j=i;j<s.length;j++){
if(s[i]>s[j]){
int temp =s[i];
s[i] = s[j];
s[j] = temp;
}
}
}
int j=0;
for(int i=0;i<g.length;i++){
while(j<s.length){
if(g[i]<=s[j]) {
count++;
j++;
break;
}
else{
j++;
}
}
}
return count;
}
}
错误解
class Solution {
public int findContentChildren(int[] g, int[] s) {
//g是孩子//s是饼干
/*省略一段对胃口值和饥饿值排序的代码,排序用的就是冒泡排序*/
//主要这里循环考虑错了 不应该是从i开始而应该是从没分配的饼干开始逐个去比较
for(int i=0;i<g.length;i++){
for(int j=i;j<s.length;j++){
if(g[i]<=s[j]){
count++;
break;
}
}
}
return count;
}
}
不足之处
时间效率有点低看看官方题解有没有新的思路
官方题解瞅一瞅
class Solution {
public int findContentChildren(int[] g, int[] s) {
//将我的代码修改成官方的排序方式后时间复杂度下去了
Arrays.sort(g);
Arrays.sort(s);
int numOfChildren = g.length, numOfCookies = s.length;
int count = 0;
for (int i = 0, j = 0; i < numOfChildren && j < numOfCookies; i++, j++) {
while (j < numOfCookies && g[i] > s[j]) {
j++;
}
if (j < numOfCookies) {
count++;
}
}
return count;
}
}
What I have learned
1.贪心算法 先满足局部最优 然后实现全局最优
2.有关比较的题 可以先考虑排序,很多问题排序后可以简化
3.JAVA数组排序 Arrays.sort()