分析

保存一个单调递减的stack,元素是(num, max+t)
遇到大于等于栈顶的,把栈顶的挪出来,然后记录同一次挪出的最大的max_t
如果挪完st还有剩余的话,max_t ++
然后ans就是取所有max_t的最大值
最后把(num, max_t)放到栈顶即可

python code

class Solution:def totalSteps(self, nums: List[int]) -> int:ans = 0st = [] # (num, max_t)for num in nums:max_t = 0# 保持一个单调递减队列while st and st[-1][0] <= num:max_t = max(max_t, st.pop()[1])# 若前面还能保留至少一个if st: max_t += 1ans = max(ans, max_t)# 加入单调栈st.append((num, max_t))return ans

java code

class Solution {public int totalSteps(int[] nums) {var ans = 0;// 用ArrayDeque模拟stackvar st = new ArrayDeque<int[]>();for(var num: nums) {var max_t = 0;while(!st.isEmpty() && st.peek()[0] <= num) {max_t = Math.max(max_t, st.peek()[1]);st.pop();}if(!st.isEmpty()) max_t++;ans = Math.max(ans, max_t);st.push(new int[]{num, max_t});}return ans;}
}

总结

ArrayDeque里面放的是int[]
然后有isEmpty(), peek(), pop(), push()等封装好的栈的方法
学到了学到了

leetcode:6080. 使数组按非递减顺序排列【单调栈 + 合并】相关推荐

  1. LeetCode_2289_使数组按非递减顺序排列

    题目链接 https://leetcode.cn/problems/steps-to-make-array-non-decreasing/ 题目描述 给你一个下标从 0 开始的整数数组 nums .在 ...

  2. 34. 在排序数组中查找元素的第一个和最后一个位置给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标

    34. 在排序数组中查找元素的第一个和最后一个位置 难度中等2012 给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target.请你找出给定目标值在数组中的开始位置和结束位置. 如果 ...

  3. leetcode第88题“非递减顺序排列“是什么意思?

    我在遇到这个词的时候,确实是影响到了我对题目意思的判断,后来查清楚了. 分享 给大家这个小知识点: 非递减顺序排列即是指:数列递减,但不是单调递减,中间可以有重复. 比如:8,6,6,3,2,1. 1 ...

  4. LeetCode 1674. 使数组互补的最少操作次数(差分思想)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个长度为 偶数 n 的整数数组 nums 和一个整数 limit . 每一次操作,你可以将 nums 中的任何整数替换为 1 到 limit 之间的 ...

  5. LeetCode 1551. 使数组中所有元素相等的最小操作数(等差数列)

    文章目录 1. 题目 2. 解题 1. 题目 存在一个长度为 n 的数组 arr ,其中 arr[i] = (2 * i) + 1 ( 0 <= i < n ). 一次操作中,你可以选出两 ...

  6. LeetCode 945. 使数组唯一的最小增量

    945. 使数组唯一的最小增量 思路:预留多一点空间给它:用哈希表计算有多少个相同的值 class Solution { public:int minIncrementForUnique(vector ...

  7. leetcode 5488. 使数组中所有元素相等的最小操作数(C++)

    存在一个长度为 n 的数组 arr ,其中 arr[i] = (2 * i) + 1 ( 0 <= i < n ). 一次操作中,你可以选出两个下标,记作 x 和 y ( 0 <= ...

  8. 基于链表的两个非递减有序序列的合并(C++)

    描述 给定两个非递减的整数序列A和B,利用链表表示序列A和B,将A和B合并为一个非递增的有序序列C,序列C允许有重复的数据.要求空间复杂度为O(1). 输入 多组数据,每组数据有三行,第一行为序列A和 ...

  9. leetcode.84 leetcode739. 每日温度(都是单调栈)

    学习不息,转载不止. 后面有自己写的题解.别忘了. 单调栈学习建议以及练习(15:54 开始):「力扣」第 42.739.496.316.901.402.581 题. 这是一个非常典型的利用单调栈来解 ...

最新文章

  1. 音频编辑软件_Audacity2.12版
  2. python 表格格式输出_利用python对excel中一列的时间数据更改格式操作
  3. 周志华讲座---关于人工智能---科普性质---天地工学讲坛2017.11.30
  4. 用shell写了一个自动编译代码的脚本
  5. 从有界到无界,腾讯新一代企业网引领安全创新
  6. Redis在Web项目中的应用与实践
  7. 大白菜UEFI版制作u盘启动盘使用教程
  8. label里面的文字换行_如何在JLabel中自动换行文本?
  9. 通过判断流的头 判断文件类型
  10. 连接MySQL错误:Can't connect to MySQL server (10060)
  11. ubuntu18.04安装网卡驱动
  12. nero8 刻录 avi文件
  13. 2019数据结构考研复习指导习题代码(王道论坛)
  14. 用深度学习识别海洋生物?飞桨轻松完成挑战!
  15. Codeforces Round #787 (Div. 3)
  16. 机器学习PR:神经网络系列之概述
  17. docker ubuntu容器安装ping工具
  18. PMSM的发展及研究现状
  19. manjaro20初始配置
  20. 幼儿在托育集体环境中,到底学到了什么?

热门文章

  1. 不同的人生不同的追求
  2. dede站点地图模板:dede功能模块模板路径对应表
  3. 经历考研失败后如何找到心仪的工作
  4. python 乘法运算定律_乘法运算定律专项练习题
  5. 全国计算机一级及格率,计算机一级通过率高吗 怎样提高通过率
  6. n%2==1什么意思?n/2什么意思?有n\2这种写法吗?
  7. 用JAVA实现输入年月日,输出这是一年的第几天,是星期几
  8. Javascript的IE和Firefox兼容性
  9. 在Google Play发布应用显示设备数量为0,处理办法
  10. 语音特征MFCC原理,谱图理解(谱图横轴坐标理解)