代码随想录算法训练营第三十一 | ● 455.分发饼干 ● 376. 摆动序列 ● 53. 最大子数组和

455.分发饼干

讲解链接:https://programmercarl.com/0455.%E5%88%86%E5%8F%91%E9%A5%BC%E5%B9%B2.html

//   参考代码
class Solution {
public:
    int findContentChildren(vector<int>& g, vector<int>& s) {
        sort(g.begin(), g.end());
        sort(s.begin(), s.end());
        int index = s.size() - 1; // 饼干数组的下标
        int result = 0;
        for (int i = g.size() - 1; i >= 0; i--) { // 遍历胃口
            if (index >= 0 && s[index] >= g[i]) { // 遍历饼干
                result++;
                index--;
            }
        }
        return result;
    }
};
//自己写的代码,有点费事了
class Solution {
public:
    int findContentChildren(vector<int>& g, vector<int>& s) {
        sort(g.begin(),g.end());
        sort(s.begin(),s.end());
        int sum = 0;
        vector<bool> used_s(s.size(),false);
        vector<bool> used_g(g.size(),false);
        for(int i=g.size()-1;i>=0;i--) {
            for(int j=s.size()-1;j>=0;j--) {
                if(used_s[j]==false && used_g[i] == false && s[j]>=g[i]) {
                    used_s[j]=true;
                    used_g[i]=true;
                    sum++;
                }
                else if(s[j] < g[i])
                    break;
                else if(used_s[j]==true)
                    continue;
            }
        }
        return sum;
    }
};

在这里插入图片描述

376. 摆动序列

讲解链接:https://programmercarl.com/0376.%E6%91%86%E5%8A%A8%E5%BA%8F%E5%88%97.html

class Solution {
public:
    int wiggleMaxLength(vector<int>& nums) {
        if(nums.size()<=1)
            return nums.size();
        //计算数组中i+1 与 i 之间的差值
        int curDiff = 0;
        //在result更新的时候再更新preDiff
        int preDiff = 0;
        //记录峰值的个数;
        int result = 1;
        for(int i=0;i<nums.size()-1;i++) {
            curDiff = nums[i+1] - nums[i];
            //注意这里的符号是左≤且右> || 左≥且右< 
            if((preDiff <=0 && curDiff >0) ||(preDiff>=0 && curDiff<0)) {
                result++;
                preDiff = curDiff;
            }
        }
        return result;
    }
};

在这里插入图片描述

53. 最大子数组和

讲解链接:https://programmercarl.com/0053.%E6%9C%80%E5%A4%A7%E5%AD%90%E5%BA%8F%E5%92%8C.html

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int result = INT32_MIN;
        int count = 0;
        for(int i=0;i<nums.size();i++) {
            count+=nums[i];
            if(count > result) {
                result = count; //更新result;
            }
            if(count<=0)  // 相当于重置最大子序起始位置,因为遇到负数一定是拉低总和
                count = 0;
        }
        return result;
    }
};

在这里插入图片描述

红色的起始位置就是贪心每次取 count 为正数的时候,开始一个区间的统计
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值