leetcode 455. 分发饼干

这段代码是为LeetCode问题455. 分发饼干提供的两种解决方案。问题要求分配饼干给孩子,使尽可能多的孩子满足胃口。每个孩子都有一个胃口值,每个饼干都有一个尺寸值,饼干只能分给胃口值小于等于饼干尺寸的孩子。

方案1

cpp 复制代码
#include <vector>
#include <algorithm>
using std::vector;
/*
 * @lc app=leetcode.cn id=455 lang=cpp
 *
 * [455] 分发饼干
 */

// @lc code=start
class Solution {
public:
    int findContentChildren(vector<int>& g, vector<int>& s) {
        std::sort(g.begin(),g.end());
        std::sort(s.begin(),s.end());
        int m = g.size(); // 孩子的数量
        int n = s.size(); // 饼干的数量
        int count = 0;
        for (int i = 0, j = 0; i < m && j < n; i++, j++) {
            while (j < n && g[i] > s[j]) {
                j++;
            }
            if (j < n) {
                count++;
            }
        }
        return count;
    }
};
// @lc code=end

方案2

cpp 复制代码
#include <vector>
#include <algorithm>
using std::vector;
/*
 * @lc app=leetcode.cn id=455 lang=cpp
 *
 * [455] 分发饼干
 */

// @lc code=start
class Solution {
public:
    int findContentChildren(vector<int>& g, vector<int>& s) {
        std::sort(g.begin(), g.end());
        std::sort(s.begin(), s.end());
        int child = 0; // 能吃饱的孩子数量
        int cookie = 0;
        while (child < g.size() && cookie < s.size()) {
            if (g[child] <= s[cookie++]) {
                child++;
            }
        }
        return child;
    }
};
// @lc code=end

两种方案的解释和比较

方案1的解释
  1. 首先对孩子的胃口值数组 g 和饼干尺寸数组 s 进行排序。
  2. 使用两个指针 ij 分别遍历 gs
  3. 在每一步中,如果当前饼干的尺寸 s[j] 不满足当前孩子的胃口 g[i],则继续检查下一个饼干。
  4. 一旦找到满足当前孩子的饼干,就增加计数器 count,并移动到下一个孩子。
  5. 最后返回满足的孩子数量 count
方案2的解释
  1. 同样对孩子的胃口值数组 g 和饼干尺寸数组 s 进行排序。
  2. 使用两个指针 childcookie 分别遍历 gs
  3. 在每一步中,如果当前饼干 s[cookie] 可以满足当前孩子 g[child],则增加满足的孩子数量 child
  4. 无论是否满足当前孩子,饼干指针 cookie 都前进。
  5. 最后返回满足的孩子数量 child
比较
  • 方案1 使用了 while 循环内的 if 判断来跳过不满足的饼干,较为直观。
  • 方案2 代码更加简洁,使用 cookie++ 代替了 while 循环,使得每次都前进饼干指针,减少了循环的复杂度。

从效率上来看,两个方案的时间复杂度都是 O(n log n)(排序) + O(n)(遍历),但方案2的代码更简洁,易于理解和维护。

相关推荐
王老师青少年编程几秒前
csp信奥赛C++高频考点专项训练之贪心算法 --【贪心与二分判定】:数列分段 Section II
c++·算法·贪心·csp·信奥赛·二分判定·数列分段 section ii
V搜xhliang024622 分钟前
OpenClaw科研全场景用法:从文献到实验室的完整自动化方案
运维·开发语言·人工智能·python·算法·microsoft·自动化
天真小巫33 分钟前
2026.5.2总结
职场和发展
汉克老师37 分钟前
GESP2025年3月认证C++五级( 第三部分编程题(2、原根判断))
c++·算法·模运算·gesp5级·gesp五级·原根·分解质因数
weisian15138 分钟前
基础篇--概念原理-1-Token是什么?——从原理到实战,一篇讲透
人工智能·职场和发展·token
数据皮皮侠1 小时前
上市公司创新韧性数据(2000-2024)|顶刊同款 EIR 指数
大数据·人工智能·算法·智慧城市·制造
WL_Aurora1 小时前
Python 算法基础篇之链表
python·算法·链表
科研前沿1 小时前
纯视觉无感解算 + 动态数字孪生:室内外无感定位技术全新升级
大数据·人工智能·算法·重构·空间计算
Wadli2 小时前
26.单调栈
算法
晨曦夜月2 小时前
进程的五大状态及特殊进程解析
linux·服务器·算法