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

算法训练(leetcode)二刷第二十三天 | 455. 分发饼干、*376. 摆动序列、53. 最大子数组和

刷题记录

  • 455. 分发饼干
  • *376. 摆动序列
  • 53. 最大子数组和

455. 分发饼干

leetcode题目地址

贪心算法。将两个数组排序后都从大向小匹配(优先考虑胃口)。

两个数组哪个是外层移动,哪个是内层移动:胃口在外,饼干尺寸在内。

也就是说:

  • 若当前胃口若对得上当前饼干尺寸,则二者同时移动,且结果数+1;
  • 若当前饼干尺寸无法满足当前胃口,就需要胃口数组向更小的方向移动,而饼干尺寸不变。

**Tips:**若是从小到大匹配(优先考虑饼干),则内外层交换。

时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn) 排序用时O(nlogn) 匹配用时O(n)
空间复杂度: O ( 1 ) O(1) O(1)

// java
class Solution {


    public int findContentChildren(int[] g, int[] s) {
        Arrays.sort(g);
        Arrays.sort(s);
        int cnt = 0;
        int i=s.length-1;
        for(int j=g.length-1; j>=0&&i>=0; j--){
            if(s[i] >= g[j]){
                cnt++;
                i--; 
            }
        }

       
        return cnt;
    }
}

*376. 摆动序列

leetcode题目地址

题目要求严格摆动序列,因此前一组差和后一组差必须一正一负。而起始状态下没有计算差值默认前一组差值为0。因此在判断时: (preDiff >= 0 || preDiff <= 0)加入了等于0的判断。

**Tips:**为什么这里用preDiff=0判断起始状态而不是用curDiff=0判断?

因为curDiff计算的是当前一组的差值,若当前组差值为0则为平坡,不进入if;而preDiff是在if中进行更新的,因此只会在初始状态下问为0,其余情况均不为0。

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( 1 ) O(1) O(1)

// java
class Solution {

    public int wiggleMaxLength(int[] nums) {
        if(nums.length <= 1) return nums.length;
        int preDiff = 0;
        int curDiff = 0;
        int result = 1;

        for(int i=0; i<nums.length-1; i++){
            curDiff = nums[i+1] - nums[i];
            if((curDiff<0 && preDiff>=0) || (curDiff>0 && preDiff<=0)){
                result++;
                preDiff = curDiff;
            }
        }
        return result;
    }
}

53. 最大子数组和

leetcode题目地址

求最大连续子数组和,对数组中元素依次求和,当和为负值时将其置为0重新累加。为处理数组中全为负的情况,需要先记录最大值再置0。

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( 1 ) O(1) O(1)

// java
class Solution {
    public int maxSubArray(int[] nums) {
        int maxVal = -10001;
        int curVal = 0;
        for(int i=0; i<nums.length; i++){
            curVal += nums[i];
            
            if(curVal > maxVal) maxVal = curVal;
            if(curVal<0) curVal = 0;
        }
        return maxVal;
    }
}

http://www.kler.cn/a/392462.html

相关文章:

  • JS 异步 ( 一、异步概念、Web worker 基本使用 )
  • KylinOS V10 SP3下编译openGauss与dolphin插件
  • C#连接SQLite数据库并实现基本操作
  • 【GeekBand】C++设计模式笔记15_Proxy_代理模式
  • MyBatis如何处理延迟加载?
  • 使用C#生成一张1G大小的空白图片
  • 机器学习 笔记
  • 在 Ubuntu 上安装 `.deb` 软件包有几种方法
  • 【数据治理】你知道如何做静态脱敏吗?
  • TTL器件和CMOS器件的逻辑电平
  • 【动态规划】打家劫舍类问题
  • wordpress实用功能A5资源网同款 隐藏下载框 支付框 需要登录才能查看隐藏的内容
  • 系统架构设计师论文:论软件维护方法及其应用
  • git同步fork和原始仓库
  • 【C#设计模式(5)——原型模式(Prototype Pattern)】
  • ubuntu24.04安装matlab失败
  • PDF 转 Word——10个实用优质工具大揭秘!
  • 大数据学习13之Scala基础语法(重点)
  • Redis做分布式锁
  • day12:版本控制器
  • 检测敏感词功能
  • CelebV-Text——从文本生成人脸视频的数据集
  • 2024 年 Postman 进行 Websocket 接口测试的图文教程
  • 激活函数解析:神经网络背后的“驱动力”
  • 练习LabVIEW第四十三题
  • 从0开始深度学习(26)——汇聚层/池化层