LeetCode 贪心 455.分发饼干

我永远喜欢EVA!

目录

  • 题目描述
  • 输入输出样例
  • 思路
  • 代码实现
  • 总结

题目描述

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

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;
    }
}

总结

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

萌新刚开始写博客,请大佬们多多指教呀!喜欢的可以点赞收藏加关注三连,您的支持是我不断前进的动力!

你可能感兴趣的:(刷题,算法,贪心算法,leetcode,c++,java)