【LeetCode】17.貪心(455)

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;
        
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章