LeetCode 贪心 455.分发饼干

题目描述

假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干,每个孩子都有一个饥饿度,且只有饼干的大小大于或等于孩子的饥饿度时,孩子才能感到满足。求解最多能满足多少个孩子。

LeetCode原题链接:
455.分发饼干

输入输出样例

输入两个数组,分别代表孩子的饥饿度和饼干的大小。输出最多可以满足多少个孩子的数量。

Input: [1,2,3], [1,1]
Output: 1
Explain: 
虽然拥有两块大小为1的饼干,但只能让唯一的饥饿度为1的孩子满足,所以输出为1.

思路

这道题我们可以使用贪心法解决,考虑最贪的策略,每个孩子只给大小恰好令其满足的饼干,绝不多给,即令饼干大小尽可能等于饥饿度。首先我们要先获取大小关系,将孩子的饥饿度与饼干大小分别排序,这样就可以从饥饿度最小的孩子和最小的饼干出发,逐一进行比较:能满足则令结果+1,不能满足再用大一点的饼干进行比较,从而得出满足条件的“对子”的数目。

代码实现

//c++实现
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; //i为能满足的孩子数及孩子数组的索引,j为饼干数组的索引
        while(i<g.size() && j<s.size()){
            if(g[i]<=s[j]){
                ++i; //饼干大小能够满足孩子的饥饿度
            }
            ++j;
        }
        return i;
    }
};

这里附上JAVA的代码:(其实差别不是很大)

//JAVA实现
class Solution {
    public int findContentChildren(int[] g, int[] s) {
        Arrays.sort(g);
        Arrays.sort(s);
        int i = 0, j = 0;
        while(i < g.length && j < s.length){
            if(g[i] <= s[j]){
                ++i;
            }
            ++j;
        }
        return i;
    }
}

总结

本题属于贪心策略中比较简单的一题,也是明显的分配问题,值得注意的是,对数组或字符串进行排序可以方便我们进行大小的比较

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值