leetcode 455. Assign Cookies
2017-06-29 14:41
423 查看
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.
Example 1:
Example 2:
这一题跟51nod抓兔子那一题有所类似,但是更简单,根本就用不上优先级队列。
首先用treemap记录cookie的<size,个数>,treemap有一个方法叫ceilingKey,The method call returns the least key greater than or equal to key, or null if there is no such key.再对于每个children的贪婪度进行遍历,如果有正好大于等于它的饼,那么就对map做出修改:如果该size只有一个,那么个数减少后,个数为0,那么从map中去掉这个size;如果个数不为1,那么个数--。
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.
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. You need to output 1.
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, You need to output 2.
这一题跟51nod抓兔子那一题有所类似,但是更简单,根本就用不上优先级队列。
package leetcode; public class Assign_Cookies_455 { public int findContentChildren(int[] g, int[] s) { if(g.length==0||s.length==0){ return 0; } quicksort(g, 0, g.length-1);//children quicksort(s, 0, s.length-1);//cookies int cookiePointer=0; for(int chidrenPointer=0;chidrenPointer<g.length;chidrenPointer++){ int childrenNeed=g[chidrenPointer]; if(childrenNeed>s[cookiePointer]){ continue; } else{ cookiePointer++; if(cookiePointer==s.length){ break; } } } return cookiePointer; } //倒序快排 public void quicksort(int[] a,int left,int right){ if(left<right){ int low=left; int high=right; int pivot=a[low]; while(low<high){ while(low<high&&a[high]<=pivot){ high--; } if(low<high){ a[low]=a[high]; low++; } while(low<high&&a[low]>=pivot){ low++; } if(low<high){ a[high]=a[low]; high--; } } a[low]=pivot; quicksort(a, left, low-1); quicksort(a, low+1, right); } } public static void main(String[] args) { // TODO Auto-generated method stub Assign_Cookies_455 a=new Assign_Cookies_455(); int[] g=new int[]{1,2,3}; int[] s=new int[]{3}; System.out.println(a.findContentChildren(g, s)); } }大神想法跟我类似,只不过是从小到大排序,然后搜索第一个比孩子欲望大的饼。
public class Solution { public int findContentChildren(int[] g, int[] s) { Arrays.sort(g); Arrays.sort(s); int pointG = 0; int pointS = 0; while (pointG<g.length && pointS<s.length) { if (g[pointG]<=s[pointS]) { pointG++; pointS++; } else { pointS++; } } return pointG; } }另外一种方法是,使用treemap,treemap内部实现原理是红黑树哦。
首先用treemap记录cookie的<size,个数>,treemap有一个方法叫ceilingKey,The method call returns the least key greater than or equal to key, or null if there is no such key.再对于每个children的贪婪度进行遍历,如果有正好大于等于它的饼,那么就对map做出修改:如果该size只有一个,那么个数减少后,个数为0,那么从map中去掉这个size;如果个数不为1,那么个数--。
public class AssignCookies { public static int findContentChildren(int[] g, int[] s) { int count = 0; TreeMap<Integer,Integer> tree = new TreeMap<>(); for(int temp : s){ Integer num = tree.get(temp); num = num==null?0:num; tree.put(temp,num+1); } for(int temp : g){ Integer targ = tree.ceilingKey(temp); if(targ!=null){ Integer num = tree.get(targ); if(num>0){ count++; if(num==1){ tree.remove(targ); }else{ tree.put(targ, num - 1); } } } } return count; } }
相关文章推荐
- leetcode-455. Assign Cookies
- LeetCode "455. Assign Cookies"
- [leetcode: Python]455. Assign Cookies
- leetcode_455. Assign Cookies 分配饼干,java数组的排序
- 【LeetCode】 455. Assign Cookies
- LeetCode455. Assign Cookies简单的做法
- 【leetcode】455. Assign Cookies
- 【LeetCode】455. Assign Cookies
- LeetCode解题报告 455. Assign Cookies [easy]
- 【Leetcode】455. Assign Cookies
- leetcode 455. Assign Cookies(C语言,堆排序)28
- LeetCode 455. Assign Cookies
- Leetcode 455. Assign Cookies
- Leetcode:455. Assign Cookies (week 7)
- leetcode :455. Assign Cookies
- LeetCode-Greedy-455. Assign Cookies
- LeetCode 455. Assign Cookies
- [leetcode]: 455. Assign Cookies
- Leetcode 455. Assign Cookies
- Leetcode455. Assign Cookies