用 C++ 分配 Cookie


假设我们尝试给孩子们分发一些饼干。但是,我们应该给每个孩子不超过一块饼干。现在,每个孩子 i 都有一个贪婪度 gi,它是孩子会满足的饼干的最小大小;每个饼干 j 有一个大小 sj。当 sj >= gi 时,我们可以把饼干 j 分配给孩子 i,孩子 i 就会满足。我们的目标是最大化满足孩子的数量,并输出最大数量。

因此,如果输入类似于 [1,2],[1,2,3],则输出将是 2,有 2 个孩子和 3 块饼干。2 个孩子的贪婪度为 1、2。现在我们有 3 块饼干,并且它们的大小足够满足所有孩子,因此输出为 2。

为解决这个问题,我们将按照以下步骤操作 -

  • 对数组 g 进行排序

  • 对数组 s 进行排序

  • i := 0,j = 0

  • 只要 (i < g 的大小且 j < s 的大小) 执行 -

    • 如果 g[i] <= s[j],则 -

      • (i 加 1)

    • (j 加 1)

  • 返回 i

示例

为了更好地理解,我们来看一下以下实现 -

 实时演示

#include <bits/stdc++.h>
using namespace std;
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;
      while (i < g.size() && j < s.size()) {
         if (g[i] <= s[j])
            i++;
            j++;
         }
         return i;
      }
};
main(){
   Solution ob;
   vector<int> v = {1,2}, v1 = {1,2,3};
   cout << (ob.findContentChildren(v, v1));
}

输入

{1,2}, {1,2,3}

输出

2

更新于:2020 年 6 月 10 日

635 次浏览

开启你的 职业生涯

完成课程并获得认证

开始
广告
© . All rights reserved.