LeetCode: 455 Assign Cookies(easy)

题目:

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:

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.

代码:

 1 class Solution {
 2 public:
 3     int findContentChildren(vector<int>& g, vector<int>& s) {
 4         int result = 0;
 5         while ((!g.empty())&&(!s.empty())){
 6             auto gmax = max_element(g.begin(), g.end());
 7             auto smax = max_element(s.begin(), s.end());
 8             if (*gmax <= *smax){
 9                 result++;
10                 g.erase(gmax);
11                 s.erase(smax);
12             }
13             else
14                 g.erase(gmax);
15         }
16         return result;
17     }
18 };

改良版:

 1 class Solution {
 2 public:
 3     int findContentChildren(vector<int>& g, vector<int>& s) {
 4         int result = 0;
 5         sort(g.begin(), g.end(), greater<int>());
 6         sort(s.begin(), s.end(), greater<int>());
 7         vector<int>::iterator gtem = g.begin();
 8         vector<int>::iterator stem = s.begin();
 9         
10         while (gtem != g.end() && stem != s.end()){
11             if (*gtem > *stem)
12                 gtem++;
13             else{
14                 result++;
15                 gtem++;
16                 stem++;
17             }
18         }
19         return result;
20     }
21 };

 

posted on 2017-09-11 21:57  玲珑子  阅读(129)  评论(0编辑  收藏  举报

导航