0.題目描述
假設你是一位很棒的家長,想要給你的孩子們一些小餅乾。但是,每個孩子最多隻能給一塊餅乾。對每個孩子 i ,都有一個胃口值 gi ,這是能讓孩子們滿足胃口的餅乾的最小尺寸;並且每塊餅乾 j ,都有一個尺寸 sj 。如果 sj >= gi ,我們可以將這個餅乾 j 分配給孩子 i ,這個孩子會得到滿足。你的目標是儘可能滿足越多數量的孩子,並輸出這個最大數值。
實例如下
1.題目分析
我們可以將小孩胃口進行從到大小排序,然後從胃口最小的孩子開始,依次看是否還剩有滿足它們胃口的餅乾。分情況考慮:
(1)若餅乾數組爲空,則直接返回0
(2)若小孩數組爲空…應該不會有這種情況
(3)否則,將餅乾數組排序,從餅乾數組出發,遍歷孩子數組,如果當前餅乾滿足某個孩子則count+1,剔除該孩子。
我看題目有的評論是優先滿足胃口小的孩子,我這裏的思想是優先將餅乾小的派出去被喫掉,其實是一樣的。
2.代碼
用快排排序,然後遍歷,代碼如下
class Solution {
public:
void Quicksort(vector<int>& nums, int left, int right)
{
int i = left;
int j = right;
while (i != j)
{
while (nums[j] >= nums[left]&& i!=j)
{
j--;
}
while (nums[i] <= nums[left] && i != j)
{
i++;
}
if (i != j)
{
swap(nums[i], nums[j]);
}
else
{
swap(nums[i], nums[left]);
}
}
if (i - 1 > left)
Quicksort(nums, left, i - 1);
if (j + 1 < right)
Quicksort(nums, j + 1, right);
}
int findContentChildren(vector<int>& g, vector<int>& s) {
if (s.size()==0)
return 0;
int count=0;
Quicksort(s,0,s.size()-1);
for(int i=0;i<s.size();i++)
{
for(int j=0;j<g.size();j++)
{
if(s[i]>=g[j])
{
count++;
g.erase(g.begin()+j);
break;
}
}
}
return count;
}
};