【贪心算法】Leetcode 455.分发饼干 376. 摆动序列 53. 最大子数组和

news2025/1/26 15:38:22

【贪心算法】Leetcode 455 分发饼干 376. 摆动序列【规律很多】53. 最大子数组和

  • 455 分发饼干
    • 局部最优推全局最优:尽量用大饼干去满足大胃口的小朋友
  • 376. 摆动序列【规律很多】
    • 思想:注意考虑一个坡度留首尾两个点、平坡、首尾
  • 53. 最大子数组和【好思想】
    • 思想:遍历nums,当前“连续和”为负数的时候立刻放弃,从下一个元素重新计算“连续和”

455 分发饼干

在这里插入图片描述

---------------🎈🎈题目链接🎈🎈-------------------

局部最优推全局最优:尽量用大饼干去满足大胃口的小朋友

class Solution {
    public int findContentChildren(int[] g, int[] s) {
        // 贪心
        // 局部最优推全局最优:尽量用大饼干去满足大胃口的小朋友
        if(s.length == 0) return 0;
        int result = 0;
        Arrays.sort(g);
        Arrays.sort(s);

        // 遍历小孩胃口g[i]
        int start = s.length - 1;
        for(int i = g.length-1; i >=0; i--){
            if(start >= 0 && g[i] <= s[start]){
                result++;
                start--;
            }
        }
        return result;
    }
}  

时间复杂度

对两个数组进行排序的时间复杂度为 O(n log n),其中 n 分别为小孩胃口数组 g 和饼干数组 s 的长度。
在最坏情况下,遍历两个数组的时间复杂度为 O(n),其中 n 是小孩胃口数组 g 的长度。
因此,总的时间复杂度为 O(n log n)。

空间复杂度:

除了输入数组 g 和 s 外,额外使用了常量空间进行迭代和计算。
因此,总的空间复杂度为 O(1)。


376. 摆动序列【规律很多】

在这里插入图片描述

一正一负 找到一个峰值:(pre>=0 && cur<0) || (pre<=0 && cur>0)。result++,遇到波动点就更新pre的值为cur
设定开头pre = 0:即原本是2-5,模拟为2-2-5 这样可以保证计算到开头的节点也算波动点。
设定开头cur = 0 ,但是随后循环中就赋值了 cur = nums[i+1] - nums[i]
在这里插入图片描述

思想:注意考虑一个坡度留首尾两个点、平坡、首尾

class Solution {
    public int wiggleMaxLength(int[] nums) {
// 贪心  一个坡度上只留首位两个点
// 考虑平坡的时候
 	// 考虑单调有平坡 : 左右留一个就行 pre>=0 && cur<0 || pre<=0 && cur>0
	// 考虑上下中间有平坡 :只需要在 坡度摆动变化的时候,更新 pre 就行,
		这样 pre 在 单调区间有平坡的时候 就不会发生变化,造成我们的误判
// 考虑首尾元素 首尾元素都要计算坡度 尾部直接result本身就为1,首部假定开头pre=0
           

        int result = 1;
        int pre = 0; // 前一段默认先为0 后面遇到波动点的时候赋值为cur
        int cur = 0;
        for(int i = 0; i < nums.length-1; i++){
            cur = nums[i+1] - nums[i];  // 后一段
            if((pre>=0 && cur<0) || (pre<=0 && cur>0)){  // 一正一负就找到一个峰值
                result++;
                pre = cur;  // 即出现波动点才给pre赋值为cur,就可以避免单调中平坡的影响
            } 
        }
      
        return result;
    }
}

53. 最大子数组和【好思想】

题目链接
在这里插入图片描述

思想:遍历nums,当前“连续和”为负数的时候立刻放弃,从下一个元素重新计算“连续和”

思想!!!:
如果一部分加和为负数,那么后面再加一个无论什么元素都相当于是减,那么就没必要了
那么就遍历nums,遇到和为负数就重新开始计算加和,
没遇到的时候:如果加和结果大于result就给result赋值 最后返回result
注意这里用了int result = Integer.MIN_VALUE; 保证了若数组都为负数,result记录的就是最大的负数。

class Solution {
    public int maxSubArray(int[] nums) {
        // 贪心算法,
        // 如果一部分加和为负数,那么后面再加一个无论什么元素都相当于是减,那么就没必要了
        // 那么就遍历nums,遇到和为负数就重新开始计算加和,没遇到的时候如果加和结果大于result就给result赋值,
        // 最后返回result
        int result = Integer.MIN_VALUE; // 这个很重要 可以保证如果全为负数的时候可以正常输出
        int sum = 0;
        for(int i = 0; i < nums.length; i++){
            sum = sum+nums[i];
            if(sum > result) {  
                result = sum;
            }
            if(sum < 0){ // 如果加和小于零那就重新开始 因为后面再加没必要了
                sum = 0;
            }    
        }
        return result; // 最后返回的result就是最大的
    }
}

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

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

相关文章

FreeRTOS学习笔记-基于stm32(1)任务基础知识

一、裸机与RTOS 我们使用的32板子是裸机&#xff0c;又称前后台系统。裸机有如下缺点&#xff1a; 1、实时性差。只能一步一步执行任务&#xff0c;比如在一个while循环中&#xff0c;要想执行上一个任务&#xff0c;就必须把下面的任务执行完&#xff0c;循环一遍后才能执行…

从0开始学习NEON(2)

1、前言 继上一个例子&#xff0c;本次继续来学习NEON&#xff0c;本次学习NEON中向量拼接的操作&#xff0c;主要应用在图像的padding中。 https://blog.csdn.net/weixin_42108183/article/details/136440707 2、案例 2.1 案例1 在某些情况下&#xff0c;需要取在每个向量…

轻松压缩照片大小:简单实用的方法

当您需要通过网络传输或共享照片时&#xff0c;较小的文件大小可以提高传输速度并减少带宽消耗。这适用于通过电子邮件、社交媒体、即时消息应用程序等发送照片的场景。为了解决这个问题&#xff0c;本文将介绍一些简单而有效的方法来压缩照片的大小&#xff0c;以便更方便地分…

python并发编程:IO模型

一 IO模型 二 network IO 再说一下IO发生时涉及的对象和步骤。对于一个network IO \(这里我们以read举例\)&#xff0c;它会涉及到两个系统对象&#xff0c;一个是调用这个IO的process \(or thread\)&#xff0c;另一个就是系统内核\(kernel\)。当一个read操作发生时&#xff…

面试经典150题——基本计算器

​A husband is a man of many miles. ——Unknown 1. 题目描述 2. 题目分析与解析 2.1 思路一——先算括号内的内容 这个题目其实就是编译原理中很小的一个模块了&#xff0c;基本思路还是通过栈来实现。题目的难点主要在&#xff1a; 其中括号优先级的处理&#xff0c;以…

Spring揭秘:ImportBeanDefinitionRegistrar应用场景及实现原理!

内容概念 ImportBeanDefinitionRegistrar接口提供了强大的动态注册Bean的能力&#xff0c;它允许开发者在Spring容器初始化时&#xff0c;灵活地根据特定条件或需求来添加或修改Bean定义&#xff0c;从而实现更为精细的控制和扩展性。这是构建可扩展框架、插件系统或处理复杂配…

请说说你对Vue模板编译的理解

Vue模板编译是Vue.js框架的核心之一&#xff0c;它负责将Vue模板转换成渲染函数&#xff0c;从而实现模板的解析和渲染。要深入了解Vue模板编译&#xff0c;我们需要从编译过程、作用、特点等方面进行详细解析。 1. Vue模板编译的作用 Vue模板编译的主要作用是将Vue模板字符串…

021—pandas 书单整理将同一种书整理在一起

前言 在办公自动化场景下&#xff0c;最常见的需求就是信息的整理&#xff0c;pandas 最擅长复杂数据逻辑的处理&#xff0c;能够让整理工作更加高效&#xff0c;同时不容易出错。今天的案例是将一个平铺的书单按品类进行整理&#xff0c;合并为一行。 需求: 将书按书名进行合…

【python高级编程教程】笔记(python教程、python进阶)第三节:(1)多态与鸭子类型(Polymorphism and Duck Typing)

参考文章1&#xff1a;【比刷剧还爽】清华大佬耗时128小时讲完的Python高级教程&#xff01;全套200集&#xff01;学不会退出IT界&#xff01; 参考文章2&#xff1a;清华教授大力打造的Python高级核心技术&#xff01;整整100集&#xff0c;强烈建议学习&#xff08;Python3…

基于springboot的母婴商城

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本母婴商城系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息&am…

Windows10安装Docker

使用 PowerShell 启用 Hyper-V 以管理员身份打开 PowerShell 控制台。 运行以下命令&#xff1a; PowerShell复制 Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All如果无法找到此命令&#xff0c;请确保你以管理员身份运行 PowerShell。 安装…

Claude3深夜震撼发布!模型特点分析,附使用教程

Claude3深夜震撼发布&#xff01;模型特点分析&#xff0c;附使用教程 引言 最新发布的Claude3引起了广泛关注&#xff0c;这次发布一举推出了三个不同类型的模型&#xff0c;分别是Claude 3 Haiku、Claude 3 Sonnet和Claude 3 Opus。每个模型都具有独特的特点和能力&#xff…

Objective-C blocks 概要

1.block的使用 1.1什么是block&#xff1f; Blocks是C语言的扩充功能&#xff1a;带有自动变量&#xff08;局部变量&#xff09;的匿名函数。 “带有自动变量”在Blocks中表现为“截取自动变量" “匿名函数”就是“不带名称的函数” 块&#xff0c;封装了函数调用及调用…

代码随想录算法训练营Day38 || leetCode 7509. 斐波那契数 || 70. 爬楼梯 || 746. 使用最小花费爬楼梯

动态规划和我们数电中学习的时序电路类似&#xff0c;某一时刻的状态不仅与当前时刻的输入有关&#xff0c;还与之前的状态有关&#xff0c;所以推导过程中我们需要模拟题目中的情况&#xff0c;来找到每一时刻状态间的关系。 做题思路如下 509. 斐波那契数 此题简单 状态方程…

【QT】创建第一个QT程序

下面的前7个可以先不看&#xff0c;直接从8开始看 1. 创建Qt程序 一个Qt程序的组成部分&#xff1a;应用程序类&#xff0c;窗口类应用程序类个数&#xff1a;有且只有一个QApplication a;如何查看类对应的模块&#xff1a;光标移动到类上&#xff0c;F1qmake模块的名字 2. …

Java开发从零开始,mysql面试题索引

前言 “金九银十”的秋招热潮已经开始了&#xff0c;经过7月8月这两个月的提前批&#xff0c;终于成功拿下了一些大厂的offer。小编经过这么多次的面试&#xff0c;这两天整理了一份面试清单分享给大家&#xff0c;希望能给大家一点帮助(java方向)&#xff0c;觉得有帮助的同学…

3分钟带你搞定电流采样电阻选型

大家好&#xff0c;我是砖一。 一&#xff0c;电流采样电阻的介绍 电流检测电路常用于高压短路保护、电机控制、DC/DC换流器、系统功耗管理、二次电池的电流管理、蓄电池管理等电流检测等场景。 比如&#xff0c;对于电机来说&#xff0c;电流检测电路是为了检测电流功能有比…

ssm基于javaEE+springboot校园闲置二手物品拍卖交易平台_ngad7

为提升浏览用户观感及使用体验&#xff0c;本系统要具有易用性和美观性。通过页面的简单提示就可完成操作&#xff0c;校园闲置物品交易平台展示界面应该清楚简洁&#xff0c;使用户通过美观的前台页面能快速定位想要浏览的校园闲置物品交易平台信息。后台界面也应简约&#xf…

领腾讯云红包,可抵扣云服务器订单金额

在2024年腾讯云新春采购节优惠活动上&#xff0c;可以领取新年惊喜红包&#xff0c;打开活动链接 https://curl.qcloud.com/oRMoSucP 会自动弹出红包领取窗口&#xff0c;如下图&#xff1a; 腾讯云2024新春采购节红包领取 如上图所示&#xff0c;点击“领”红包&#xff0c;每…

5G网络深度覆盖提升感知优化案例

随着5G业务的发展&#xff0c;用户感知尤为重要&#xff0c;随着人们的生活水平不断提高&#xff0c;对网络使用的要求也越来越高&#xff0c;用户感知更加重要&#xff0c;数据业务已超越语音业务成为流量和收入的主体&#xff0c;信号质量的决定作用更明显。5G TDD的频谱大带…