[leetcode]解决Assign Cookies的一点小心得
来源:互联网 发布:linux arp刷新 编辑:程序博客网 时间:2024/06/06 01:32
本次选择的题目是
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.
Solution:
一开始想把每一步的步骤都表示出来:
主要采取的策略是:最小的size匹配最小的需求。如果匹配不了,找次小的size匹配最小的需求,以此类推。
#include <iostream> #include <vector> using namespace std; struct Child{ int index; int greed; bool mark;};struct Cookie{ int index; int size; bool mark;};class Solution {public: int findContentChildren(vector<int>& g, vector<int>& s) { if(g.size()==0||s.size()==0) { return 0; } Child child[g.size()]; Cookie cookie[s.size()]; int max_s = 0; int max_g = 0; for (int i = 0;i < s.size();i++) { if(s[i]>max_s){ max_s = s[i]; } } for (int i = 0;i < g.size();i++) { if(g[i]>max_g){ max_g = g[i]; } } int min_s = max_s; int min_g = max_g; int index_s; int index_g; int trytime = 0; int assigned = 0; for (int i = 0;i < g.size();i++) { child[i].index = i + 1; child[i].greed = g[i]; child[i].mark = false; } for (int i = 0;i < s.size();i++) { cookie[i].index = i + 1; cookie[i].size = s[i]; cookie[i].mark = false; } while(trytime != s.size()) { min_s = max_s; min_g = max_g; for (int i = 0;i < s.size();i++) { if(cookie[i].mark == false && cookie[i].size <= min_s) { index_s = i; min_s = cookie[i].size; } } cookie[index_s].mark = true; trytime++; for (int i = 0;i < g.size();i++) { if(child[i].mark == false && child[i].greed <= min_g) { index_g = i; min_g = child[i].greed; } } if(min_s >= min_g&&child[index_g].mark != true) { child[index_g].mark = true; assigned++; } } return assigned; }};
只计算匹配成功的次数:
class Solution {public: int findContentChildren(vector<int>& g, vector<int>& s) { sort(g.begin(),g.end()); sort(s.begin(),s.end()); int i=0, j=0,count = 0; while(i<g.size() && j<s.size()) { if(g[i]>s[j]) j++; else if(g[i++]<=s[j++]) count++; } return count; }};
阅读全文
0 0
- [leetcode]解决Assign Cookies的一点小心得
- [leetcode]解决Majority Element的一点小心得
- [leetcode]解决Clone Graph的一点小心得
- [leetcode]解决Minimum Height Trees的一点小心得
- [leetcode]解决Same Tree的一点小心得
- [leetcode]解决Symmetric Tree的一点小心得
- [leetcode]解决Move Zeroes的一点小心得
- [leetcode]解决Maximum Subarray的一点小心得
- [leetcode]解决Climbing Stairs的一点小心得
- [leetcode]解决House Robber的一点小心得
- [leetcode]解决Kth Largest Element in an Array的一点小心得
- OOA的一点小心得!
- github的一点小心得
- 使用开发工具的一点小心得
- 使用__doPostBack函数的一点小心得
- 调试VC++程序的一点小心得
- 关于系统设计的一点小心得
- 关于js的一点小心得
- 使用包时的静态引入:import static
- UVA489 Hangman Judge
- JavaScript 开发人员需要知道的简写技巧
- Servlet介绍
- vue axios全攻略
- [leetcode]解决Assign Cookies的一点小心得
- android fresco 详解大全
- 银联的跨行清算体系架构分析
- raise NoReverseMatch("%s is not a registered namespace" % key)
- 【数据分析】脑图讲述数据分析方法论
- 相机标定
- Butter Knife使用详解
- HTML5表单
- CRC校验原理与计算