LeetCode题解:455. 分发饼干,贪心while循环,JavaScript,详细注释

原题链接:https://leetcode-cn.com/problems/assign-cookies/

解题思路:

  1. 按照题意,孩子将会始终处于等待状态,而饼干可能出现多个都无法满足孩子胃口的情况。
  2. 例如孩子的胃口为5,饼干为[1,2,3,4,5,6]的话,那么必须要从1到5遍历饼干,才可以查找到可以被吃的饼干。
  3. 因此可以用while循环遍历饼干,用两个指针分别遍历孩子和饼干,但只有在遇到饼干满足胃口时,孩子的指针才会移动,同时增加。
  4. 当孩子或者饼干遍历完成时,则退出循环。
/**
 * @param {number[]} g
 * @param {number[]} s
 * @return {number}
 */
var findContentChildren = function (g, s) {
  // 先将g和s都排序,按顺序对比保证不会出现遗漏
  g.sort((a, b) => a - b);
  s.sort((a, b) => a - b);
  // 获取孩子和饼干的数量
  const sLength = s.length;
  const gLength = g.length;
  // 分别使用两个指针遍历孩子和饼干
  let gIndex = 0;
  let sIndex = 0;
  // 存储吃到饼干的孩子数量
  let count = 0;

  // 当孩子和指针任意一个被遍历完成时,即可知道结果,退出循环
  while (gIndex < gLength && sIndex < sLength) {
    if (s[sIndex] >= g[gIndex]) {
      // 若饼干可被食用,则两个指针一起移动,匹配下一个元素
      sIndex++;
      gIndex++;
      // 统计吃到饼干的孩子数量
      count++;
    } else {
      // 若饼干不可被食用,则继续继续匹配下一个饼干,孩子处于等待状态
      sIndex++;
    }
  }

  return count;
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值