刷题笔记NO.1--贪心算法之分饼干

#跟着谷歌高畅刷题

分饼干(leetcode455)

题目:

有一群孩子和一堆饼干,每个孩子有一个饥饿度,每个饼干都有一个大小。每个孩子只能吃 一个饼干,且只有饼干的大小不小于孩子的饥饿度时,这个孩子才能吃饱。求解最多有多少孩子 可以吃饱。

分析:

两个数组vector<int> children, vector<int> cookies

下标记为child,cookie

要最多的小孩吃饱,有三点需要注意:

1.吃饱的条件是饼的大小大于等于小孩的饥饿度

2.先让饥饿度小的吃饱,依次递增

3.给跟他们饥饿度最接近的饼干

要实现第一点就是

children[child]<=cookies[cookie]

第二点的要求很明显就要将饥饿度大小进行排序

sort(children.begin(),children.end());

第三点要给跟饥饿度最接近的,那就把饼干大小也进行排序,从最小的饼干开始找,直到找到满足条件的为止

sort(cookies.begin(),cookies.end());

完整代码:

int FindChlidrenCount(vector<int>&children,vector<int>&cookies)
{
    sort(children.begin(),children.end();
    sort(cookies.begin(),cookies.end();//饥饿度和饼干大小都从大到小进行排序
    int child=0;int cookie=0;//从最小的开始
    while(child<children.size()&&cookie<cookies.size())
{
    if(children[child]<=cookies[cookie]) child++;//如果满足条件则孩子下标往后移一位,找满足胃口更大的孩子的饼干(孩子是必须得到了满足才能往后移的)
    cookie++;//不论此时的孩子是否满足条件,饼干下标都往后移,因为如果满足,则此饼干被此孩子吃掉,若不满足,则给此孩子找更大的饼干
}
return child;//返回满足条件的孩子数量
}
    
    
    
复杂度不会分析,有没有大佬教教我,还有快排也不是很懂
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值