Title:
Assign Cookies
Link to LeetCode:
https://leetcode.com/problems/assign-cookies/
Specification:
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 gi, which is the minimum size of a cookie that the child will be content with;
and each cookie j has a size sj. If sj >= gi, 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.
Note:
You may assume the greed factor is always positive.
You cannot assign more than one cookie to one child.
Examples:
Example 1:
Input: [1,2,3], [1,1]
Output: 1
Explanation:
You have 3 children and 2 cookies. The greed factors of 3 children are 1, 2, 3.
And even though you have 2 cookies, since their size is both 1, you could only make the child whose greed factor is 1 content.
Example 2:
Input: [1,2], [1,2,3]
Output: 2
Explanation:
You have 2 children and 3 cookies. The greed factors of 2 children are 1, 2.
You have 3 cookies and their sizes are big enough to gratify all of the children,
Initial Code and Signature:
public interface Distributer {
public int findContentChildren(int[] g, int[] s) ;
}
Algorithm:
Run-Time Analysis:
GitHub Project:
https://github.com/m-h-s/Algorithms-Codes/tree/master/26-AssignCookies
Code:
/**
* @author Mahsa Sadi
*
* @since 2020 - 05 - 08
*
* License Creative Commons
*
* Copyright by Mahsa Sadi
*/
import java.util.*;
import java.util.Collections;
import ArrayOperations.*;
public class DistributerS1 implements Distributer {
int numberOfContentChildren = 0;
public int findContentChildren(int[] g, int[] s) {
/**
* Problem: Assign Cookies
*
* Description:
* 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 gi, which is the minimum size of a cookie that the child will be content with;
* and each cookie j has a size sj.
* If sj >= gi, 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.
*
* Note:
* You may assume the greed factor is always positive.
* You cannot assign more than one cookie to one child.
*
*
* @see https://leetcode.com/problems/assign-cookies/
*
* Solution:
*
* 1- Sort cookie size
* 2- Sort greed factors
* 3- Assign the minimum size to the minimum Greed Factor that matches the size.
* 4- Increase count
* 5- Continue until all the sizes are checked.
* 6- Return count
*
*/
int i, j;
i = j = 0;
boolean assigned;
int next = 0;
Arrays.sort(g);
Arrays.sort(s);
while (i < s.length && next < g.length )
{
assigned = false;
j = next;
while (j < g.length && !assigned )
{
if (s [i] >= g [j])
{
this.numberOfContentChildren ++;
assigned = true;
next = j + 1;
}
else
j++;
}
i++;
}
return numberOfContentChildren;
}
}