day26|455.分发饼干、376. 摆动序列、53. 最大子序和。进军贪心

news2024/10/9 10:21:42

455.分发饼干

假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。

对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。

示例 1:

输入: g = [1,2,3], s = [1,1]

输出: 1

解释: 你有三个孩子和两块小饼干,3个孩子的胃口值分别是:1,2,3。 虽然你有两块小饼干,由于他们的尺寸都是1,你只能让胃口值是1的孩子满足。 所以你应该输出1。 

示例 2:

输入: g = [1,2], s = [1,2,3]

输出: 2

解释: 你有两个孩子和三块小饼干,2个孩子的胃口值分别是1,2。 你拥有的饼干数量和尺寸都足以让所有孩子满足。 所以你应该输出2. 

问题分析:

利用局部最优满足全局最优。

局部最优:把大饼干喂给胃口大的,充分利用饼干尺寸

全局最优:争取满足更多小孩

一定要先排序,从前往后遍历小孩,用大饼干喂胃口大的,并统计小孩数量

class Solution {
    public int findContentChildren(int[] g, int[] s) {
        Arrays.sort(g);
        Arrays.sort(s);
        int index=s.length-1;//饼干遍历下标
        int result=0;//满足小孩数
        for (int i=g.length-1;i>=0;i--){
            if (index>=0&&s[index]>=g[i]){//index>=0防止出现异常
                result++;
                index--;
            }
        }
        return result;
    }
}

376. 摆动序列

如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列 。第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。

  • 例如, [1, 7, 4, 9, 2, 5] 是一个 摆动序列 ,因为差值 (6, -3, 5, -7, 3) 是正负交替出现的。

  • 相反,[1, 4, 7, 2, 5] 和 [1, 7, 4, 5, 5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。

子序列 可以通过从原始序列中删除一些(也可以不删除)元素来获得,剩下的元素保持其原始顺序。

给你一个整数数组 nums ,返回 nums 中作为 摆动序列 的 最长子序列的长度 。

示例 1:

输入:nums = [1,7,4,9,2,5]

输出:6 解释:整个序列均为摆动序列,各元素之间的差值为 (6, -3, 5, -7, 3) 。 

示例 2:

输入:nums = [1,17,5,10,13,15,10,5,16,8]

输出:7

解释:这个序列包含几个长度为 7 摆动序列。 其中一个是 [1, 17, 10, 13, 10, 16, 8] ,各元素之间的差值为 (16, -7, 3, -3, 6, -8) 。 

示例 3:

输入:nums = [1,2,3,4,5,6,7,8,9]

输出:

问题分析:

局部最优:删除单调坡度上的节点(不包括单调坡度两端的节点),那么这个坡度就可以有两个局部峰值。(真实不用删直接统计数值result)

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

在计算是否有峰值的时候,计算prediff与curdiff,如果(prediff<=0&&curdiff>0)或者(prediff>=0&&curdiff<0)就可以统计result,并把prediff移位。

本题要考虑三种情况:

1、情况一:上坡下坡中间有平坡

2、情况二:只有首尾两端(不同)

针对此情形,result默认为1(默认最右面有一个峰值),并且for循环遍历范围为i<nums.length-1,遍历到倒数第二个元素。

3、情况三:单调上坡/单调下坡中间有平坡

class Solution {
    public int wiggleMaxLength(int[] nums) {
        int preDiff=0;
        int curDiff=0;
        int result=1;
        if (nums.length==1) return 1;
        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. 最大子序和

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

子数组 是数组中的一个连续部分。

示例 1:

输入:nums = [-2,1,-3,4,-1,2,1,-5,4]

输出:6

解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。 

示例 2:

输入:nums = [1]

输出:

示例 3:

输入:nums = [5,4,-1,7,8]

输出:23 

问题分析:

若-2,1放在一起,-2会拉低总和,所以要从1开始,这就是贪心思维。

局部最优:当前连续和为负数的时候,就直接清0,从下一个元素开始计算连续和。

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

及时记录最大值result

class Solution {
    public int maxSubArray(int[] nums) {
        int result=Integer.MIN_VALUE;//最大和。切记还有全负数情况,所以用最小值
        int sum=0;//变动和
        for (int i=0;i<nums.length;i++){
            sum=sum+nums[i];
            result=Math.max(result,sum);
            if (sum<0){
                sum=0;
            }
        }
        return result;
    }
}


 

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

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

相关文章

Python | 数据类型之元组和字典

知识目录一、元组(tuple)1.1 元组的创建1.2 访问和修改元组1.3 内置函数二、字典(dict)2.1 字典的创建2.2 访问和修改字典2.3 字典键的特性2.4 函数与方法一、元组(tuple) Python 的元组与列表类似&#xff0c;不同之处在于元组的元素不能修改。 元组使用小括号&#xff0c;列…

kubernetes-dashboard 实现 http 访问以及免 token 登录

文章目录[toc]下载官方 yaml 文件修改 yaml 文件修改 service 端口修改 clusterrolebinding修改 deployment 内容修改探针检测修改镜像拉取策略修改容器端口关闭 token 登录增加 ingress完整版 yaml下载官方 yaml 文件 最后有完整版的 yaml 文件&#xff0c;不想看细节的话&am…

苹果中的这些小技巧,你知道吗

技巧一&#xff1a;iPhone镜像 觉得手机屏幕太小看电影玩游戏不爽怎么办&#xff1f;投屏功能帮我们解决了问题&#xff0c;使用方法也很简单。打开控制中心&#xff0c;点击投屏&#xff0c;选择设备&#xff0c;连接投屏。这里需要注意的是&#xff0c;手机和连接的设备必须在…

【MIKE水动力】MIKE11基本原理(上)

Mike11软件包由水动力、对流&#xff5e;扩散、水质、降雨&#xff5e;径流、洪水预报等模块组成&#xff0c;核心模块为水动力模块。Mike11水动力模块采用6点Abbott&#xff5e;Ionescu有限差分格式对圣维南方程组求解。 一、圣维南方程组 1、基本要素与假设条件 Mike11模型…

开源流程引擎activiti、flowable、camunda选哪个好?

市场上比较有名的开源流程引擎有osworkflow、jbpm、activiti、flowable、camunda。其中&#xff1a;Jbpm4、Activiti、Flowable、camunda四个框架同宗同源&#xff0c;祖先都是Jbpm4&#xff0c;开发者只要用过其中一个框架&#xff0c;基本上就会用其它三个。低代码平台、办公…

IO流概念、FileWriter类及FileReader类详解

目录 IO流概述和分类 ​编辑FileWriter写数据 FileWriter写数据的方法 FileWriter写数据常见问题 FileReader读数据 IO流概述和分类 IO流用来处理设备之间的数据传输–文件复制,上传文件和下载文件 IO流分类–输出流——FileWriter –输入流——FileReader 图式详解&am…

< 每日算法 - Javascript解析: 交通枢纽 >

每日算法 - JavaScript解析&#xff1a;交通枢纽一、任务描述&#xff1a;》 示例一&#xff1a;》示例二二、题意解析拓展知识三、解决方案&#xff1a;往期内容 &#x1f4a8;一、任务描述&#xff1a; 为了缓解「力扣嘉年华」期间的人流压力&#xff0c;组委会在活动期间开…

谷歌优化排名怎么做?Google SEO怎么优化?

本文主要分享关于Google自然排名优化中的一些方法和技巧&#xff0c;让你更快的做好谷歌排名。 本文由光算创作&#xff0c;有可能会被修改和剽窃&#xff0c;我们佛系对待这种行为吧。 谷歌优化排名怎么做&#xff1f;Google SEO怎么优化&#xff1f; 答案是&#xff1a;创…

CMOS器件与TTL器件CMOS电平与TTL电平

常用的数字芯片&#xff0c;按制造工艺主要分为TTL器件和CMOS器件。TTL器件是指其内部主要逻辑单元为双极性晶体管&#xff0c;CMOS器件是指其内部的主要逻辑单元为MOS管。现在绝大部分数字芯片使用的工艺都是CMOS工艺&#xff0c;在一些比较老的74系列芯片中还使用的是TTL工艺…

51单片机最强模块化封装(1)

文章目录前言一、sys文件创建和路径添加1.创建文件夹添加文件夹路径二、sys文件编写1.sys.h2.sys.c三、模块化的测试总结前言 今天将为大家讲解51单片机的模块化封装&#xff0c;为什么要讲这个模块化封装呢&#xff1f;模块化封装将提高我们代码的可移植性和可复用性&#xf…

力扣刷题记录——1002. 查找共用字符、905. 按奇偶排序数组、 977. 有序数组的平方

本专栏主要记录力扣的刷题记录&#xff0c;备战蓝桥杯&#xff0c;供复盘和优化算法使用&#xff0c;也希望给大家带来帮助&#xff0c;博主是算法小白&#xff0c;希望各位大佬不要见笑&#xff0c;今天要分享的是——《力扣刷题记录——1002. 查找共用字符、905. 按奇偶排序数…

服务器被ddos攻击的处置策略

如果您的服务器遭到了DDoS攻击&#xff0c;以下是一些可以采取的措施&#xff1a;使用防火墙和安全组进行限制&#xff1a;限制服务器的流量以防止进一步的攻击。升级服务器资源&#xff1a;为了应对更高的流量&#xff0c;可以升级服务器的内存&#xff0c;处理器等资源。安装…

GraspNet-1Billion

目录 .1 intro .2 Dataset 2.1 data collection&#xff1a; 2.2 data annotation 2.3 evaluation .3 backbone 3.1 Training and Inference 3.2 Experiment References .1 intro contribution: 一个具有统一评价体系的大规模抓取姿态检测数据集 评估系统通过解析计…

顶会论文 | 虚拟网络探测技术的探索与实践

作者&#xff1a;吕彪 阿里云网络齐天负责人 云网络由物理网络和虚拟网络共同组成&#xff0c;两者都会影响网络性能。过去的研究主要集中于解决物理网络探测&#xff0c;而在虚拟网络探测领域的相应研究则较少。本文将为大家分享一种专为大规模多租户虚拟网络设计的主动探测系…

SAP进阶技术分享一:ABAP增强(1)

一&#xff1a;基于源代码的增强 1.定义 源代码增强以子程序形式发布&#xff0c;可以用PERFORM调用这些子程序&#xff0c;发布的时候是空的&#xff0c;提供一个空代码的子过程&#xff0c;用户可以添加自己的代码。 2.特点 需要修改sap的标准代码。   屏幕增强以客户屏幕…

opencv轮廓相关函数

查找轮廓contours, hierarchy cv2.findContours(image,mode,method)参数&#xff1a;image&#xff1a;寻找轮廓所使用的图像。&#xff08;寻找过程不修改此图像&#xff09;mode&#xff1a;模式。cv2.RETR_EXTERNAL只检测外轮廓&#xff1b;cv2.RETR_LIST检测的轮廓不建立等…

【Qt】10.Linux下,Qt连接云MySQL数据库

目录 下载MySQL压缩包 配置MySQL Qt下编译MySQL 测试 下载MySQL压缩包 网址&#xff1a; MySQL :: Download MySQL Community Server (Archived Versions)https://downloads.mysql.com/archives/community/ 我为了跟云服务器上的MySQL版本一致&#xff0c;减少不必要的麻…

带你手撕排序算法

文章目录前言一、排序的相关概念二、插入排序1.直接插入&#xff08;1&#xff09;算法思想&#xff08;2&#xff09;算法讲解&#xff08;3&#xff09;代码及解析&#xff08;4&#xff09;代码总结2.希尔排序( 缩小增量排序 )&#xff08;1&#xff09;算法思想&#xff08…

maxcomputer的分区表相关操作

– 查看xsxw(学生行为表定义) desc xsxw; – 查看xsxw1(学生行为表定义) desc xsxw1; – 上面的两张表是通过ddl语句创建的分区表 – 创建ddl语句如下 – CREATE TABLE IF NOT EXISTS xsxw1( – xwsj STRING COMMENT ‘行为时间’, – xh STRING COMMENT ‘学号’, – xwdd ST…

基于OptiSystem的LD\LED\EDFA仿真分析

1、客户需求&#xff1a; &#xff08;1&#xff09; 仿真LD、LED直接调制系统的输出光谱&#xff0c;观察系统输出性能。 &#xff08;2&#xff09; 采用EDFA的光纤通信系统&#xff0c;实现对多路光波信号的放大&#xff0c;实现200km、40Gbit/s的传输。用仿真软件搭建一个…