贴原题:
Assume you are an awesome parent and want to give your children some COOKIEs. But, you should give each child at most one COOKIE. Each child i has a greed factor gi, which is the minimum size of a COOKIE that the child will be content with; and each COOKIE j has a size sj. If sj >= gi, we can assign the COOKIE j to the child i, and the child i will be content. Your goal is to maximize the number of your content children and output the maximum number.
Note: You may assume the greed factor is always positive. You cannot assign more than one COOKIE to one child.
Example 1: Input: [1,2,3], [1,1]
Output: 1
Explanation: You have 3 children and 2 COOKIEs. The greed factors of 3 children are 1, 2, 3. And even though you have 2 COOKIEs, since their size is both 1, you could only make the child whose greed factor is 1 content. You need to output 1.
Example 2: Input: [1,2], [1,2,3]
Output: 2
Explanation: You have 2 children and 3 COOKIEs. The greed factors of 2 children are 1, 2. You have 3 COOKIEs and their sizes are big enough to gratify all of the children, You need to output 2.
解析:
本题的题目说的有点复杂,简单来说就是给出两个数组,求数组2big enough于数组2元素的个数。换言之,就是求数组2中元素>=数组1中元素的个数。
我的思路很简单,就是把两个数组从小到大排序,然后依次比较各位元素的大小,如果big enough则计数器加一,否则换数组2中下一个较大的值与之比较,直到其中一个数组的元素都比较完。
C代码:
void heapAjust(int* array, int size, int root)
{int left=2*root;int right=left+1;int largest=root;if(leftarray+left)>*(array+largest)){largest=left;}if(rightarray+right)>*(array+largest)){largest=right;}if(largest!=root){*(array+largest)=*(array+largest)^*(array+root);*(array+root)=*(array+largest)^*(array+root);*(array+largest)=*(array+largest)^*(array+root);heapAjust(array, size, largest);}
}
void heapSort(int* array, int size)
{for(int i=size/2; i>=0; i--){heapAjust(array, size, i);}for(int i=size-1; i>0; i--){*array=*array^*(array+i);*(array+i)=*array^*(array+i);*array=*array^*(array+i);heapAjust(array, i, 0);}
}
int findContentChildren(int* g, int gSize, int* s, int sSize) {heapSort(g, gSize);heapSort(s, sSize);int cnt&#61;0;int i&#61;0, j&#61;0;while(iif(*(g&#43;i)<&#61;*(s&#43;j)){cnt&#43;&#43;;i&#43;&#43;;j&#43;&#43;;}else{j&#43;&#43;;}}return cnt;
}