day31|leetcode|C++|贪心|455.分发饼干|376. 摆动序列|53. 最大子数组和

局部最优解,是一种感觉

455.分发饼干

链接455. 分发饼干

thought

如何让更多的孩子吃到合适的饼干呢,重排来实现局部最优,每次我们都挑出当前胃口最小的孩子,从小到大找饼干,只要满足就res++,当最大的饼干都不能满足当前孩子时,返回结果

完整C++代码如下

class Solution {
public:
    int findContentChildren(vector<int>& g, vector<int>& s) {
        int res=0;
        sort(g.begin(),g.end());
        sort(s.begin(),s.end());
        for(int i=0,j=0;i<s.size()&&j<g.size();i++){
            if(s[i]>=g[j]){
                j++;
                res++;
            }
        }
        return res;
    }
};

376. 摆动序列

链接376. 摆动序列

thought

摆动中,如何始终保持局部最优,只要不断寻找下一个差值不同的即可,这个过程中,用reverse记录即可

完整C++代码如下

class Solution {
public:
    int wiggleMaxLength(vector<int>& nums) {
        int res = 0;
        int reverse = 0; 
        for(int i = 1; i < nums.size(); i++){
            if(nums[i-1]<nums[i] && reverse != 1){
                res++;
                reverse = 1;
            }
            else if(nums[i-1]>nums[i] && reverse != 2){
                res++;
                reverse = 2;
            } 
        }
        return res + 1; 
    }
};



53. 最大子数组和

链接53. 最大子数组和

thought

  • 本题的精髓在于如何在不断遍历中始终记录最大值,答案是用一个相同长度的数组逐个记录当前遍历过的nums和
  • 可以建立一个与原数组长度等长的数组,把新数组的值依次更新为(新数组的上一个元素的值与原数组当前索引处元素相加)与(原数组当前元素值)的最大值 最后再遍历新数组的最大值即为解

完整C++代码如下

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int size=nums.size();
        if(size==1)return nums[0];
        vector<int>nums2(size);
        nums2[0]=nums[0];
        for(int i=1;i<size;i++){
            if(nums2[i-1]<0){
                nums2[i]=nums[i];
            }else{
                nums2[i]=nums[i]+nums2[i-1];
            }
        }
        int max=nums2[0];
        for(int i=1;i<size;i++){
            if(max<nums2[i]){
                max=nums2[i];
            }
        }
        return max;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值