Problem
Assume you are an awesome parent and want to give your children some cookies. But, you should give each child at most one cookie.
Each child i has a greed factor g[i], which is the minimum size of a cookie that the child will be content with; and each cookie j has a size s[j]. If s[j] >= g[i], we can assign the cookie j to the child i, and the child i will be content. Your goal is to maximize the number of your content children and output the maximum number.
Algorithm
Greedy Algorithm. Sort both s and g in increasing order. Then, for each required minimum in g, find the corresponding smallest element in s.
Code
class Solution:
def findContentChildren(self, g: List[int], s: List[int]) -> int:
g.sort()
s.sort()
s_index, g_index, s_size, g_size, cnts = 0, 0, len(s), len(g), 0
while s_index < s_size and g_index < g_size:
while s_index < s_size and g[g_index] > s[s_index]:
s_index += 1
if s_index < s_size:
cnts += 1
s_index += 1
g_index += 1
return cnts