天天看點

LeetCode455:分發餅幹

題目描述:

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

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

輸入輸出樣例:

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

題解:

該題可采用貪心政策:因為饑餓度最小的孩子最容易喂飽,是以我們優先考慮饑餓度最小的孩子。為了使剩下的餅幹可以滿足饑餓度更大的孩子,是以我們應該在剩下的餅幹裡選擇出大于等于這個孩子饑餓度且大小最小的餅幹給這個孩子,以此類推。這裡的貪心政策便是給剩餘的孩子裡最小饑餓度的孩子配置設定最小的可以吃飽的餅幹,是以我們需要獲得孩子饑餓度和餅幹大小的大小關系,我們可以把孩子和餅幹分别排序。

class Solution {
    public int findContentChildren(int[] children, int[] cookies) {
        Arrays.sort(children);
        Arrays.sort(cookies);
        int child = 0, cookie = 0;
        while (child < children.length && cookie < cookies.length) {
            if (children[child] <= cookies[cookie]) {
                child ++;
            }
            cookie ++;
        }
        return child;
    }
}