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,学六级!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/216374.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小程序中的大道理之三--对称性和耦合问题

再继续扒 继续 前一篇 的话题, 在那里, 提到了抽象, 耦合及 MVC, 现在继续探讨这些, 不过在此之前先说下第一篇里提到的对称性. 注: 以下讨论建立在前面的基础之上, 为控制篇幅起见, 这里将不再重复前面说到的部分, 如果您还没看过前两篇章, 阅读起来可能会有些困难. 这是第一…

基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(八)

套餐模块功能开发 1. 新增套餐1.1 需求分析和设计1.1.1产品原型&#xff1a;1.1.2接口设计&#xff1a;1.1.3数据库设计&#xff1a; 1.2 代码开发1.2.1 DishController层1.2.2 DishService接口类1.2.3 DishServiceImpl接口实现类1.2.4 DishMapper层1.2.5 DishMapper.xml1.2.6 …

Vue项目实战之一----实现分类弹框效果

效果图 实现 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><script src"js/vue.js"></script><!-- 引入样式 --><link rel"stylesheet&qu…

大数据基础设施搭建 - Hive

文章目录 一、上传压缩包二、解压压缩包三、配置环境变量四、初始化元数据库4.1 配置MySQL地址4.2 拷贝MySQL驱动4.3 初始化元数据库4.3.1 创建数据库4.3.2 初始化元数据库 五、启动元数据服务metastore5.1 修改配置文件5.2 启动/关闭metastore服务 六、启动hiveserver2服务6.1…

android实战项目之二十二---如何快速APP中集成支付宝和微信支付功能

效果图 实现方案 jcenter 集成方式 implementation com.xgr.easypay:EasyPay:2.0.5 // 基类库&#xff0c;必选 implementation com.xgr.easypay:wechatpay:2.0.5 // 微信支付&#xff0c;可选 implementation com.xgr.easypay:alipay:2.0.5 // 支付宝支付&#xff0c;可…

eclipse项目移到idea上部署运行

1.配置web模块 另外&#xff0c;模块这里&#xff0c;也要加上Spring 2.配置Artifact &#xff08;用于tomcat&#xff09; 就是从上面配置的web模块&#xff0c;产生的工件 3.添加lib 一般是在web-inf/lib &#xff0c; 遇到的坑&#xff1a; jdk版本问题&#xff0c;这里…

micro_ros需要用到的hardware

我没有那么长的线啊&#xff0c;所以就用一个4块5的usb转串口看看 没有那么高档的开发板&#xff0c;就用主流的STM32F103C8T6试试看 这应该就是个仿真器了&#xff0c;一个字不认得都能够看的出来吧

php的字符转义函数有那些,是干什么的

在 PHP 中&#xff0c;字符转义函数是用于处理字符串中的特殊字符&#xff0c;以防止这些字符被误解、滥用或引起安全问题的一组函数。这些函数的主要作用是确保在将用户提供的数据插入到数据库、构建 HTML 输出或进行其他与安全相关的操作时&#xff0c;不会导致潜在的安全漏洞…

常见树种(贵州省):018栎灌、油茶、火棘、铁仔、小檗、勾儿茶、马桑、车桑子、山苍子、楮

摘要&#xff1a;本专栏树种介绍图片来源于PPBC中国植物图像库&#xff08;下附网址&#xff09;&#xff0c;本文整理仅做交流学习使用&#xff0c;同时便于查找&#xff0c;如有侵权请联系删除。 图片网址&#xff1a;PPBC中国植物图像库——最大的植物分类图片库 一、茅栗 …

一个正整数转为2进制和8进制,1的个数相同的第23个数是什么?

package cn.com;import java.lang.*;//默认加载public class C2 {//10进制转8进制static int HtoO(int n){int cnt 0;while(n!0){cntn%8;n/8;}return cnt;}//10进制转2进制static int HtoB(int n){int cnt 0;while(n!0){cntn%2;n/2;}return cnt;}public static void main(Str…

Azure Machine Learning - Azure可视化图像分类操作实战

目录 一、数据准备二、创建自定义视觉资源三、创建新项目四、选择训练图像五、上传和标记图像六、训练分类器七、评估分类器概率阈值 八、管理训练迭代 在本文中&#xff0c;你将了解如何使用Azure可视化页面创建图像分类模型。 生成模型后&#xff0c;可以使用新图像测试该模型…

【JVM】一篇通关JVM垃圾回收

目录 1. 如何判断对象可以回收1-1. 引用计数法1-2. 可达性分析算法1-3. 四种引用强引用软引用弱引用虚引用终结器引用 2. 垃圾回收算法3. 分代垃圾回收4. 垃圾回收器5. 垃圾回收调优 1. 如何判断对象可以回收 1-1. 引用计数法 引用计数法 只要一个对象被其他变量所引用&…