贪心算法day01

目录

理论基础 

455.分发饼干  

看到题目的第一想法

看到代码随想录之后的想法

自己实现过程中遇到的困难

376. 摆动序列  

看到题目的第一想法

看到代码随想录之后的想法

自己实现过程中遇到的困难

53. 最大子序和  

看到题目的第一想法

看到代码随想录之后的想法

自己实现过程中遇到的困难


理论基础 

代码随想录

贪心的本质是选择每一阶段的局部最优,从而达到全局最优

贪心算法并没有固定的套路

手动模拟一下感觉可以局部最优推出整体最优,而且想不到反例,那么就试一试贪心

  • 将问题分解为若干个子问题
  • 找出适合的贪心策略
  • 求解每一个子问题的最优解
  • 将局部最优解堆叠成全局最优解

455.分发饼干  

代码随想录

看到题目的第一想法

对数组排序

两个for循环,从小到大,

满足条件则count+1,break

然后用一个startIndex 记录刚才分配的位置,让i从startindex开始,防止重复

看到代码随想录之后的想法

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

   1 不用两个for循环,用一个for循环,里面使用index来控制,当满足条件时,index--

自己实现过程中遇到的困难

 需要注意胃口和饼干尺寸  尺寸>=胃口才能满足

先从大的开始匹配,要注意先后顺序,胃口用for循环,尺寸用index控制,不然有可能

若对尺寸进行for循环,所有的尺寸都无法满足最大胃口(最大尺寸<最大胃口),胃口将永远不会缩减(index)

class Solution {//我的思路  用小饼干投喂胃口小的,使用startIndex记录上次位置/*public int findContentChildren(int[] g, int[] s) {int count = 0;int startIndex = 0;Arrays.sort(g);Arrays.sort(s);//把最小的分配给最小的孩子for(int j=0;j<g.length;j++){for(int i=startIndex;i<s.length;i++){if(s[i]>=g[j]){count++;startIndex=i+1;break;}}}return count;}*///卡哥思路,用大饼干投喂大的//每次取最大的饼干public int findContentChildren(int[] g, int[] s) {int count = 0;int index = s.length-1;Arrays.sort(g);Arrays.sort(s);//应该是对g进行for循环//不然index--可能永不执行,尺寸最开始小于胃口的话,就永远不会出现胃口的减小/*for(int i=s.length-1;i>=0;i--){if(index>0&&s[i]>=g[index]){index--;count++;}}*///如果对胃口for循环,最大胃口满足不了,就往下走,直到能满足的胃口//用了一个 index 来控制饼干数组的遍历,遍历饼干并没有再起一个 for 循环,而是采用自减的方式,这也是常用的技巧。//额外用一个index 来确定第二个数组的遍历位置for(int i=g.length-1;i>=0;i--){if(index>=0&&s[index]>=g[i]){index--;count++;}}return count;}
}

376. 摆动序列  

代码随想录

看到题目的第一想法

摆动判断,

nums[i+1]-num[i]与nums[i] 和nums[i-1]异号

不知道如何判断两个异号

看到代码随想录之后的想法

局部最优:删除单调坡度上的节点(不包括单调坡度两端的节点),那么这个坡度就可以有两个局部峰值。
整体最优:整个序列有最多的局部峰值,从而达到最长摆动序列

贪心算法  把单调坡的都删除,得到一个最大的上下坡

   1 使用prediff 记录前一个 坡度,curdiff记录后一个坡度,当他们异号时记录下来

     有几种不同的情况需要讨论

      1 上下坡中有平坡  只记录平坡最后的节点 就是curr>0 or curr<0 pre可以=0

       2 单调坡中有平坡 不记录 需要把prediff=curdiff 放到 if中来进行,从而记住最开始的prediff的走向

        3 首尾需要讨论 首默认prediff=0 ,尾部默认有个result=1

         if(prediff>=0&&curdiff<0)||(prediff<=0&&curdiff>0)把等于0的情况也考虑进去了 

自己实现过程中遇到的困难

      1 上下坡中有平坡  只记录平坡最后的节点 就是curr>0 or curr<0 pre可以=0

       2 单调坡中有平坡 不记录 需要把prediff=curdiff 放到 if中来进行,从而记住最开始的prediff的走向

        3 首尾需要讨论 首默认prediff=0 ,尾部默认有个result=1

         if(prediff>=0&&curdiff<0)||(prediff<=0&&curdiff>0)把等于0的情况也考虑进去了 

每次记录curdiff  prediff只需要跟着curdiff走

class Solution {public int wiggleMaxLength(int[] nums) {//1 如何判断是否是摆动序列 看正负交替//while()//nums[i]-nums[i-1] >0 //nums[i+1] - nums[i]<0//count++//如何判断两个数异号//for(int i=1;i<nums.length-1;i++){////卡哥做法,//本题是要求从原始序列中删除一些元素来获得子序列//prediff 代表前一段的走向,curdiff 代表后一段的走向(prediff>0&&curdiff<0)||(prediff<0&&curdiff>0)//贪心 获取每一阶段局部最优的 --》整体最优//局部最优:删除单调坡度上的节点(不包括单调坡度两端的节点),那么这个坡度就可以有两个局部峰值。//整体最优:整个序列有最多的局部峰值,从而达到最长摆动序列//需要考虑几种情况//1 上下坡中有平坡  只保留平坡中的最后一个,就变成了峰值了//2 数组首尾两端 首端用prediff=0 ,尾端用result=1//3 单调坡度有平坡 单调坡度不需要记录int prediff =0;int result = 1;int curdiff ;for(int i=0;i<nums.length-1;i++){curdiff = nums[i+1]-nums[i];if((prediff>=0&&curdiff<0)||(prediff<=0&&curdiff>0)){result++;prediff=curdiff;}}return result;}}

53. 最大子序和  

代码随想录
 

看到题目的第一想法

用for循环,双重,把最大子数组和做个记录

看到代码随想录之后的想法

贪心

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

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

单重for循环,使用sum记录遍历过的值(当前连续和),使用result记录遍历过的最大值(所有连续和中最大的)

当sum<0时,令sum=0,因为sum<0 后续遍历只会让连续和越来越小

自己实现过程中遇到的困难

需要把result赋值为Integer.MIN_VALUE,令result=0全为负数时无法得到result

我最开始用sum>0 来更新result ,其实是不对的,因为有可能数组全负数,result永不更新

只需要sum<0时 更新sum就行,每次进入循环sum=sum+nums[i]

 

class Solution {public int maxSubArray(int[] nums) {//卡哥思路,遇到正数就记录,看是否比result大,如果大就令result=它//贪心获取部分最大的和就行//result不能等于0,要为最小值int result =  Integer.MIN_VALUE;;int sum = 0;for(int i=0;i<nums.length;i++){//不能用sum>0 来做判断,要用sum<0来做判断sum+=nums[i];/*if(sum>0){result = result>sum?result:sum;}else{sum = 0;}*/if(result<sum){result = sum;}if(sum<0){sum=0;}}return result;}
}

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

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

相关文章

CentOS 7 安装 PPTP

环境&#xff1a; 阿里云试用机&#xff1a; 外网IP&#xff1a;114.55.80.150 内网IP&#xff1a;172.28.11.92 一、服务器安装 PPTP 1、安装 yum install epel-release -y 2、安装pptp yum install pptpd iptables-services -y 3、修改配置 vim /etc/pptpd.conf# 最…

CAAC无人机操作证考证报名流程及白底证件照片制作方法

在这个无人机技术日新月异的时代&#xff0c;拥有一张CAAC民用无人机操作证不仅意味着你能够合法地在天空翱翔&#xff0c;也象征着你对飞行技术的尊重和对规章制度的遵守。如果你怀揣着成为无人机飞行员的梦想&#xff0c;那么&#xff0c;让我们一起揭开CAAC民用无人机操作证…

Flutter中的Container小部件介绍与使用

Flutter中的Container是一个强大而灵活的小部件&#xff0c;用于布局和装饰。它可以包含子部件&#xff0c;并具有多种属性&#xff0c;使得它成为构建用户界面的常见选择之一。 什么是Container&#xff1f; Container是一个用于包装和定位子部件的小部件。它允许您指定宽度…

YOLOv8训练DOTAv2数据集(官网代码/数据集转换/2024.1.2)

目的 由于项目里面需要用到机载的旋转目标检测&#xff08;Oriented Bounding Box, OBB&#xff09;,本来想在yolov8上面直接加obb检测相关的模块&#xff0c;没想到官方更新了DOTAv2数据的yaml文件&#xff0c;意味着v8已经支持了obb检测&#xff0c;但是现在版本还不是很完善…

【SpringCloud】6、Spring Cloud Gateway路由配置

在 Spring Cloud Gateway 中配置 uri 有三种方式,包括: 1、WebSocket路由 spring:cloud:gateway:routes:- id: bt-apiuri: ws://localhost:9090/predicates:

静态网页设计——美食杰官网(HTML+CSS+JavaScript)

前言 声明&#xff1a;该文章只是做技术分享&#xff0c;若侵权请联系我删除。&#xff01;&#xff01; 使用技术&#xff1a;HTMLCSSJS 主要内容&#xff1a;仿照美食杰官网 主要内容 1、首页 首页用html标签分割成多个区域&#xff0c;使用css设置样式&#xff0c;精准…

《软件项目接口安全设计规范》

1.token授权机制 2.https传输加密 3.接口调用防滥用 4.日志审计里监控 5.开发测试环境隔离&#xff0c;脱敏处理 6.数据库运维监控审计 软件全套文档&#xff1a;软件开发全套资料-CSDN博客

RA8803SA 车载用实时时钟模块

内置32.768kHz 晶体单元(频率精度调整完毕)和DTCXO1/100s精度的时间寄存器接口类型:I2C-Bus接口&#xff08;400kHz&#xff09;工作电压范围:1.6V to 5.5V温度补偿电压:2.2V to 5.5V计时&#xff08;保持&#xff09;电压范围:1.6V to 5.5V可选择输出频率为32.768kHz, 1024Hz,…

书生浦语大模型概述

github 地址&#xff1a;https://github.com/InternLM/tutorial 一、大模型简介 二、书生浦语 介绍 2.1 简介 2.2 模型到应用 如上图所示&#xff0c;从模型到应用通过共需要经过以下4个步骤&#xff1a; 模型评测&#xff1a;选择适合自己需求的模型。 不同的大模型&#x…

YOLOv7独家原创改进:新颖的Shape IoU结合 Inner-IoU,基于辅助边框的IoU损失的同时关注边界框本身的形状和尺度,小目标实现高效涨点

💡💡💡本文改进:一种新的Shape IoU方法结合 Inner-IoU,基于辅助边框的IoU损失的同时,更加关注边界框本身的形状和尺度来计算损失 💡💡💡对小目标检测涨点明显,在VisDrone2019、PASCAL VOC均有涨点 💡💡💡本文改进:一种新的Shape IoU方法,该方法可以通过…

MySQL报错1054 - Unknown column ‘24023A00000‘ in ‘field list‘

MySQL 向表中插入数据时报错: 1054 - Unknown column 24023A00000 in field list 表的设计是&#xff1a; 执行插入数据sql语句后报错&#xff1a; 解决方法&#xff1a; 我设计表时是有id字段的&#xff0c;怎么报错显示字段不在表中&#xff1f;&#xff1f;查找了很多资料…

对话小仙炖副总裁张勇:内容价值将成为直播电商的核心趋势和竞争力

“ 激活中医典籍里的智慧&#xff0c;坚持内容化之路&#xff0c;服务好消费者。” 整理 | 飞族 编辑 | 渔舟 出品&#xff5c;极新&#xff06;北京电子商务协会 随着直播电商的影响力越来越大&#xff0c;对品牌而言&#xff0c;直播不仅是一种单纯的卖货渠道&#xff0c;…

如何使用Pyxamstore快速解析Xamarin AssemblyStore文件

关于Pyxamstore Pyxamstore是一款针对Xamarin AssemblyStore文件&#xff08;assemblies.blob&#xff09;的强大解析工具&#xff0c;该工具基于纯Python 2.7开发&#xff0c;支持从一个APK文件中解包并重封装assemblies.blob和assemblies.manifest Xamarin文件。 什么是ass…

nodejs发送消息给钉钉机器人

1.钉钉添加机器人 1.1 新建一个群 --> 群设置 --> 机器人 1.2 机器人管理 --> 添加机器人 1.3 机器人--> 自定义-->添加 1.4 配置信息 备注1&#xff1a;密钥复制出来SEC2c689174c4a8ed49c8a7309a490cd98e0e7f7bc788bb7232d53c738eb5f5d008 备注2&#xff1a;…

深度学习框架TensorFlow2快速入门教程

01 深度学习框架TensorFlow2快速入门教程 目录结构 01 概述 02 准备OVF虚拟机镜像 03 导入Ubuntu22的初始化环境 04 使用VMWare拍摄快照进行备份 05 Docker环境的测试和使用 06 安装Nvidia容器工具包 07 GPU支持的TensorFlow的环境搭建和踩坑 08 拉取非GPU支持的TensorFlow镜…

[ffmpeg系列 02] 音视频基本知识

一 视频 RGB&#xff1a; AV_PIX_FMT_RGB24, ///< packed RGB 8:8:8, 24bpp, RGBRGB… Y&#xff1a;明亮度, Luminance或luma, 灰阶图&#xff0c; UV&#xff1a;色度&#xff0c;Chrominance或Chroma。 YCbCr: Cb蓝色分量&#xff0c;Cr是红色分量。 取值范围&#xff…

信息学奥赛一本通:装箱问题

题目链接&#xff1a;http://ybt.ssoier.cn:8088/problem_show.php?pid1917 题目 1917&#xff1a;【01NOIP普及组】装箱问题 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 4117 通过数: 2443 【题目描述】 有一个箱子容量为V&#xfffd;(正整数&#xff0c…

Java-虚拟机-逃逸分析/栈上分配/标量替换

假设有下面一个类&#xff0c;本文会一直使用这个类演示 public class User{public int id;public String name; }逃逸分析&#xff1a; 逃逸指的是在方法中创建的对象&#xff0c;逃到方法外&#xff0c;那么逃逸分析&#xff0c;指的就是分析一个在方法内创建的对象&#xf…

一文搞懂Python Web开发 Django

简介 Django是一个主流的Python Web框架&#xff0c;用于快速开发 Web 应用程序。功能强大&#xff0c;Python Web应用开发的第一选择。 特点 ORM&#xff08;对象关系映射&#xff09;&#xff1a; Django 提供了一个强大的 ORM&#xff0c;允许开发者通过 Python 代码来定义…

拟杆菌在肠道感染中的矛盾作用

谷禾健康 拟杆菌门细菌是革兰氏阴性菌的代表&#xff0c;具有外膜、肽聚糖层和细胞质膜。它们无氧呼吸的主要副产物是乙酸、异戊酸和琥珀酸。是最耐氧的厌氧菌之一。 参与人体结肠中许多重要的代谢活动包括碳水化合物的发酵、含氮物质的利用以及胆汁酸和其他类固醇的生物转化。…