当前位置: 首页 > news >正文

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

进入贪心了,我觉得本专题是最烧脑的专题

Leetcode 455. 分发饼干

题目链接 455 分发饼干

让大的饼干去满足需求量大的孩子即是本题的思路:

class Solution {
public:int findContentChildren(vector<int>& g, vector<int>& s) {int sum = 0;sort(g.begin(),g.end());sort(s.begin(),s.end());int result = 0;int index = s.size()-1;for(int i=g.size()-1;i>=0;i--){//胃口if(index>=0&&s[index]>=g[i]){//饼干量result++;index--;}}return result;}
};

ok,下面烧脑开始:

Leetcode 376. 摆动序列

题目链接 76 摆动序列

首先我们觉得本题目体现的贪心思想比较难想,我觉得这里应该用dp来写,但是竟然有贪心思想,就是贪心题目,那就烧脑一下吧:

局部最优:删除单调坡度上的节点(不包括单调坡度两端的节点),那么这个坡度就可以有两个局部峰值

整体最优:整个序列有最多的局部峰值,从而达到最长摆动序列

整体思路:

出现摆动就记录一下。

对应代码就是:

如果prediff < 0 && curdiff > 0 或者 prediff > 0 && curdiff < 0 此时就有波动就需要统计。

除此之外我们还要考虑三点:

第一点:上下坡中有平坡:

实际上我们取得摆动就三个,只需把中间四个2删除三个就行,这里我们只需记录即可,变成1——2——1即可,针对于代码来说就是:

(preDiff <= 0 && curDiff > 0) || (preDiff >= 0 && curDiff < 0),我们有波动就需要统计。

第二点:数组首尾两端

题目中说了,如果只有两个不同的元素,那摆动序列也是 2。

这里我们就需要建立一个虚拟节点(虚拟节点和数组开头组成preDiff == 0,即使平坡)使其满足preDiff和curDiff两边需要三个节点最基础的情况,这样我们就可将第二种情况算到第一种情况的代码中了:

(preDiff <= 0 && curDiff > 0) || (preDiff >= 0 && curDiff < 0),我们有波动就需要统计。

第三点:单调坡度有平坡(比较难想)

这时我们就不能实时更新preDiff了,我们只需在遇到(preDiff <= 0 && curDiff > 0) || (preDiff >= 0 && curDiff < 0)即摆动时我们preDiff。

下面上代码:

class Solution {
public:int wiggleMaxLength(vector<int>& nums) {int result = 0;int preDiff = 0;int curDiff = 0;result++;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;}
};

Leetcode 53. 最大子数组和

题目链接 53 最大子数组和

本题目很难发现需要使用贪心思想。

如果 -2 1 在一起,计算起点的时候,一定是从 1 开始计算,因为负数只会拉低总和,这就是贪心贪的地方!

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

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

此外我们还需要不断记录连续和,找到最大的那个,就解决问题了。

下面上代码:

class Solution {
public:int maxSubArray(vector<int>& nums) {int count = 0;int result = INT_MIN;for(int i=0;i<nums.size();i++){count+=nums[i];if(count>result){result = count;}if(count<=0){//连续和为负数,直接抛弃count = 0;}}return result;}
};

end,学六级!!!

相关文章:

  • Java LCR 089 打家劫舍
  • 日历视图,轻松解决时间管理难题丨三叠云
  • Ubuntu18.4中安装wkhtmltopdf + Odoo16配置【二】
  • 软件测试之银行测试详解
  • WordPress老是提示无法连接到FTP服务器
  • 给虚拟机配置静态id地址
  • PTA-6-45 工厂设计模式-运输工具
  • C++使用Tensorflow2.6训练好的模型进行预测
  • HTML新特性【缩放图像、图像切片、平移、旋转、缩放、变形、裁切路径、时钟、运动的小球】(二)-全面详解(学习总结---从入门到深化)
  • 四级核心词汇100 +
  • 【电路笔记】-电源电压
  • 【GitHub】保姆级使用教程
  • 在PyCharm中正确设置Python项目
  • ART-PI开发套件-构建开发环境
  • HarmonyOS应用开发实战—登录页面【ArkTS】
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • classpath对获取配置文件的影响
  • Docker下部署自己的LNMP工作环境
  • export和import的用法总结
  • Making An Indicator With Pure CSS
  • Objective-C 中关联引用的概念
  • supervisor 永不挂掉的进程 安装以及使用
  • windows-nginx-https-本地配置
  • 阿里研究院入选中国企业智库系统影响力榜
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 计算机在识别图像时“看到”了什么?
  • 三栏布局总结
  • Python 之网络式编程
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • (6)设计一个TimeMap
  • (C#)一个最简单的链表类
  • (day 12)JavaScript学习笔记(数组3)
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (笔试题)合法字符串
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (转)创业的注意事项
  • .NET : 在VS2008中计算代码度量值
  • .NET Core中的去虚
  • .NET gRPC 和RESTful简单对比
  • .NET关于 跳过SSL中遇到的问题
  • .net中调用windows performance记录性能信息
  • .NET中使用Redis (二)
  • // an array of int
  • @Documented注解的作用
  • @GetMapping和@RequestMapping的区别
  • @KafkaListener注解详解(一)| 常用参数详解
  • @RequestMapping处理请求异常
  • [ vulhub漏洞复现篇 ] Celery <4.0 Redis未授权访问+Pickle反序列化利用
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网