chencl1986 / Blog

Welcome to lee's blog.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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

chencl1986 opened this issue · comments

原题链接: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;
};