【Lintcode】1230. Assign Cookies

記錄演算法發表於2020-12-07

題目地址:

https://www.lintcode.com/problem/assign-cookies/description

給定兩個陣列, A A A代表若干小朋友的貪吃指數, B B B代表若干糖果的尺寸,一個小朋友如果吃了大於其貪吃指數的尺寸的糖果,則可以得到滿足。每個小朋友最多吃一個糖果。問最多能有多少小朋友得到滿足。

先將 A A A B B B都從小到大排序,然後優先用尺寸最小的糖果滿足貪心指數最小的小朋友,這樣的方案是使得被滿足的小朋友數量最多的方案。證明可以使用調整法,如果有哪個糖果沒有滿足貪吃指數最小的小朋友,那就做調換;同理,如果某個小朋友被尺寸太大的糖果滿足,那也可以做調整。程式碼如下:

import java.util.Arrays;

public class Solution {
    /**
     * @param g: children's greed factor
     * @param s: cookie's size
     * @return: the maximum number
     */
    public int findContentChildren(int[] g, int[] s) {
        // Write your code here
        Arrays.sort(g);
        Arrays.sort(s);
        
        int res = 0, i = 0, j = 0;
        while (i < g.length && j < s.length) {
        	// 找到尺寸最小的滿足g[i]的糖果
            while (j < s.length && s[j] < g[i]) {
                j++;
            }
            
            // 如果找不到則退出迴圈
            if (j == s.length) {
                break;
            }
            
            // 找到了,則滿足之
            res++;
            i++;
            j++;
        }
        
        return res;
    }
}

時間複雜度 O ( l A log ⁡ l A + l B log ⁡ l B ) O(l_A\log l_A+l_B\log l_B) O(lAloglA+lBloglB),空間 O ( 1 ) O(1) O(1)

相關文章