代码随想录算法训练营第31天| 455.分发饼干、 376. 摆动序列*、53. 最大子序和*

455.分发饼干

力扣题目链接

代码

示例代码
// 版本一
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;
    }
};

思路

注意版本一的代码中,可以看出来,是先遍历的胃口,在遍历的饼干,那么可不可以 先遍历 饼干,在遍历胃口呢?

其实是不可以的。

外面的 for 是里的下标 i 是固定移动的,而 if 里面的下标 index 是符合条件才移动的。

376. 摆动序列*

力扣题目链接

代码

示例代码
// 版本二
class Solution {
public:
    int wiggleMaxLength(vector<int>& nums) {
        if (nums.size() <= 1) return nums.size();
        int curDiff = 0; // 当前一对差值
        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; // 注意这里,只在摆动变化的时候更新prediff
            }
        }
        return result;
    }
};

思路

需要考虑很多情况

53. 最大子序和*

力扣题目链接

代码

示例代码
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;
            }
            if (count <= 0) count = 0; // 相当于重置最大子序起始位置,因为遇到负数一定是拉低总和
        }
        return result;
    }
};

思路

局部最优:当前“连续和”为负数的时候立刻放弃,从下一个元素重新计算“连续和”,因为负数加上下一个元素 “连续和”只会越来越小。

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-04-05 15:20:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-05 15:20:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-05 15:20:05       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-05 15:20:05       20 阅读

热门阅读

  1. Day.21

    2024-04-05 15:20:05       11 阅读
  2. 教你如何在 WebView 中实现优雅的后退键处理

    2024-04-05 15:20:05       15 阅读
  3. C# 委托与事件 深入

    2024-04-05 15:20:05       14 阅读
  4. 金融科技包含领域

    2024-04-05 15:20:05       15 阅读
  5. [环境配置]conda 64位安装32位python

    2024-04-05 15:20:05       16 阅读
  6. LeetCode的使用方法

    2024-04-05 15:20:05       11 阅读
  7. 初学者如何入门深度学习?

    2024-04-05 15:20:05       16 阅读
  8. TypeScript:泛型

    2024-04-05 15:20:05       16 阅读
  9. SSH数据加密传输:安全连接新体验

    2024-04-05 15:20:05       16 阅读
  10. android 扫描二维码

    2024-04-05 15:20:05       12 阅读
  11. think:该写什么样的blog

    2024-04-05 15:20:05       17 阅读
  12. vue如何搭建项目?

    2024-04-05 15:20:05       17 阅读
  13. 九、算法-排序-堆排序

    2024-04-05 15:20:05       18 阅读
  14. ARM Cordio WSF(一)——架构简介

    2024-04-05 15:20:05       21 阅读