Day31 | 455.分发饼干, 376. 摆动序列, 53. 最大子序和

Day31 | 455.分发饼干, 376. 摆动序列, 53. 最大子序和

分发饼干

LeetCode题目:https://leetcode.cn/problems/assign-cookies/

整体思路

  本题很简单,排序就能过。

  代码如下:

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

摆动序列

LeetCode题目:https://leetcode.cn/problems/wiggle-subsequence/

解题思路

  主要思路在于同时维护当前节点的上一段差值和下一段差值,如果正负相反则可以将计数器加一,同时,考虑到题中所描述的两个不同的值构成的序列可以看做是摆动序列。且仅有两个值的时候无法满足当前的逻辑,因此,假定前侧有个虚拟节点与头结点值相等。即prediff = 0。同时,在以上设计,其实可以看做求的是满足要求的diff值的个数,因此序列长度初始值设定为1。才能得到正确值。

  可以把思想抽象成一个链表来进行贪心算法。去掉节点的操作可以抽象为如果不满足要求,就跳过当前操作的节点进行下一个节点。

  代码如下:

class Solution {
public:
    int wiggleMaxLength(vector<int>& nums) {
        if(nums.size()==1) return 1;
        int numLen=1;
        int currdiff=0,prediff=0;
        for(int i=0;i<nums.size()-1;i++){
            currdiff = nums[i+1] - nums[i];
            if((prediff>=0&&currdiff<0)||(prediff<=0&&currdiff>0)){
                numLen++;
                prediff = currdiff;
            }
        }
        return numLen;
    }
};

最大子序和

LeetCode题目:https://leetcode.cn/problems/assign-cookies/

解题思路

  可以看做另类的求前缀和方式,来完成局部最优:如果当前sum值小于0,那么说明前面的值无法为最大子序和提供贡献,因此跳过。同时,考虑到存在子序和最大,但是后期出现负数抵消,导致最后的sum不是最大的情况,需要一个额外变量来维护sum的最大值。

  代码如下:

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int sum = 0,result = INT_MIN;
        for(int i=0;i<nums.size();i++){
            sum+=nums[i];
            if(result<sum) result = sum;
            if(sum<0){
                sum = 0;
                continue;
            }
        }
        return result;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值