首页 > 编程语言 >【算法训练营day31】LeetCode455. 分发饼干 LeetCode376. 摆动序列 LeetCode53. 最大子序和

【算法训练营day31】LeetCode455. 分发饼干 LeetCode376. 摆动序列 LeetCode53. 最大子序和

时间:2023-01-30 15:36:09浏览次数:88  
标签:LeetCode455 饼干 LeetCode53 int nums day31 vector result size

LeetCode455. 分发饼干

题目链接:455. 分发饼干

独上高楼,望尽天涯

贪心的思路,将每块饼干都发给最合适的孩子,那么最后分发饼干的策略就是最合适的,即可满足最多的孩子。

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

慕然回首,灯火阑珊

这里的局部最优就是大饼干喂给胃口大的,充分利用饼干尺寸喂饱一个,全局最优就是喂饱尽可能多的小孩

然后就是题解遍历饼干数组时没有再起一个for循环,而是采用了index自减的方式,这是一种可以学习的常用技巧。

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;
    }
};

LeetCode376. 摆动序列

题目链接: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;
    }
};

LeetCode53. 最大子序和

题目链接:53. 最大子序和

独上高楼,望尽天涯

贪心的问题都好难想啊QAQ。

慕然回首,灯火阑珊

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

全局最优:选取最大“连续和”。

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        if (nums.size() == 1) return nums[0];
        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;
    }
};

标签:LeetCode455,饼干,LeetCode53,int,nums,day31,vector,result,size
From: https://www.cnblogs.com/BarcelonaTong/p/17076081.html

相关文章

  • Day31:Object类常用方法
    Object类1.1Object概述Object类是所有类的超类、根类,基类;任何类直接或间接地继承Object类;所有对象都具备Object的方法;Object作为参数可以接受任何对象,作为返回值可以......
  • LeetCode刷题记录.Day31
    二叉树的层序遍历递归法classSolution{public:voidorder(TreeNode*cur,vector<vector<int>>&result,intdepth){if(cur==nullptr)retur......
  • day31-JQuery04
    JQuery046.jQuery的DOM操作026.9常用遍历节点方法取得匹配元素的所有子元素组成的集合:children(),该方法只考虑子元素而不考虑任何后代元素取得匹配元素后面的同辈......
  • 【算法训练营day21】LeetCode530.二叉搜索树的最小绝对差 LeetCode501. 二叉搜索树中
    LeetCode530.二叉搜索树的最小绝对差题目链接:530.二叉搜索树的最小绝对差初次尝试利用二叉搜索树的性质:中序遍历的结果是有序递增数组,最后遍历该数组得到最小绝对差。c......
  • 代码随想录Day31
    LeetCode700.二叉搜索树中的搜索给定二叉搜索树(BST)的根节点和一个值。你需要在BST中找到节点值等于给定值的节点。返回以该节点为根的子树。如果节点不存在,则返回NULL......
  • 进入python的世界_day31_网络编程—— 两种软件开发架构、网络编程之OSI七层协议
    一、软件开发架构1.第一种——C/S架构Client客户端<——————>Server服务端我们平时下载的软件包,基本都是客户端软件使用这个软件包就有一张令牌去进入店铺享受......
  • day31 1 tomcat介绍与创建web项目 & 2 继承HttpServlet类、配置webxml全局配置文件 &
    ServletJavaServlet是运行在Web服务器或应用服务器上的程序,作为客户端(Web浏览器或其他HTTP客户端)和服务端(HTTP服务器上的数据库或应用程序)之间的中间层。使用Servlet可......
  • 代码随想录day31 | 455.分发饼干 376. 摆动序列 53. 最大子序和
    455.分发饼干题目|文章思路满足能让最小胃口的孩子吃饱首先对饼干和胃口值都进行排序对饼干进行遍历,如果能满足当前孩子的胃口,那么就将结果加1。实现点击查看代......
  • 代码随想录day31
    455.分发饼干classSolution{public:intfindContentChildren(vector<int>&g,vector<int>&s){sort(g.begin(),g.end());sort(s.begin(),......
  • day31-线程基础01
    线程基础011.程序进程线程程序(program):是为完成的特定任务,用某种语言编写的一组指令的集合。简单来说,就是我们写的代码。进程:进程是指运行中的程序,比如我们使用......