日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

分發餅干

題目鏈接:https://leetcode-cn.com/problems/assign-cookies/

假設你是一位很棒的家長,想要給你的孩子們一些小餅干。但是,每個孩子最多只能給一塊餅干。

對每個孩子 i,都有一個胃口值 g[i],這是能讓孩子們滿足胃口的餅干的最小尺寸;并且每塊餅干 j,都有一個尺寸 s[j] 。如果 s[j] >= g[i],我們可以將這個餅干 j 分配給孩子 i ,這個孩子會得到滿足。你的目標是盡可能滿足越多數量的孩子,并輸出這個最大數值。

示例 1:
輸入: g = [1,2,3], s = [1,1]
輸出: 1
解釋:
你有三個孩子和兩塊小餅干,3個孩子的胃口值分別是:1,2,3。
雖然你有兩塊小餅干,由于他們的尺寸都是1,你只能讓胃口值是1的孩子滿足。
所以你應該輸出1。

示例 2:
輸入: g = [1,2], s = [1,2,3]
輸出: 2
解釋:
你有兩個孩子和三塊小餅干,2個孩子的胃口值分別是1,2。
你擁有的餅干數量和尺寸都足以讓所有孩子滿足。
所以你應該輸出2.

提示:

  • 1 <= g.length <= 3 * 104
  • 0 <= s.length <= 3 * 104
  • 1 <= g[i], s[j] <= 231 - 1

思路

為了了滿足更多的小孩,就不要造成餅干尺寸的浪費。

大尺寸的餅干既可以滿足胃口大的孩子也可以滿足胃口小的孩子,那么就應該優先滿足胃口大的。

「這里的局部最優就是大餅干喂給胃口大的,充分利用餅干尺寸喂飽一個,全局最優就是喂飽盡可能多的小孩」

可以嘗試使用貪心策略,先將餅干數組和小孩數組排序。

然后從后向前遍歷小孩數組,用大餅干優先滿足胃口大的,并統計滿足小孩數量。

如圖:

貪心算法:分發餅干

 

分發餅干

這個例子可以看出餅干9只有喂給胃口為7的小孩,這樣才是整體最優解,并想不出反例,那么就可以擼代碼了。

C++代碼整體如下:

// 時間復雜度:O(nlogn)
// 空間復雜度:O(1)
class Solution {
public:
    int findContentChildren(vector<int>& g, vector<int>& s) {
        sort(g.begin(), g.end());
        sort(s.begin(), s.end());
        int index = s.size() - 1; // 餅干數組的下表
        int result = 0;
        for (int i = g.size() - 1; i >= 0; i--) {
            if (index >= 0 && s[index] >= g[i]) {
                result++;
                index--;
            }
        }
        return result;
    }
};

從代碼中可以看出我用了一個index來控制餅干數組的遍歷,遍歷餅干并沒有再起一個for循環,而是采用自減的方式,這也是常用的技巧。

有的同學看到要遍歷兩個數組,就想到用兩個for循環,那樣邏輯其實就復雜了。

總結

這道題是貪心很好的一道入門題目,思路還是比較容易想到的。

分享到:
標簽:貪心 算法
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定