LeetCode_2289_使数组按非递减顺序排列
题目链接
- https://leetcode.cn/problems/steps-to-make-array-non-decreasing/
题目描述
给你一个下标从 0 开始的整数数组 nums 。在一步操作中,移除所有满足 nums[i - 1] > nums[i] 的 nums[i] ,其中 0 < i < nums.length 。
重复执行步骤,直到 nums 变为 非递减 数组,返回所需执行的操作数。
示例 1:
输入:nums = [5,3,4,4,7,3,6,11,8,5,11]
输出:3
解释:执行下述几个步骤:- 步骤 1 :[5,3,4,4,7,3,6,11,8,5,11] 变为 [5,4,4,7,6,11,11]
- 步骤 2 :[5,4,4,7,6,11,11] 变为 [5,4,7,11,11]
- 步骤 3 :[5,4,7,11,11] 变为 [5,7,11,11][5,7,11,11] 是一个非递减数组,因此,返回 3 。
示例 2:
输入:nums = [4,5,7,7,13]
输出:0
解释:nums 已经是一个非递减数组,因此,返回 0 。
提示:
1 <= nums.length <= 10^5
1 <= nums[i] <= 10^9
解题思路
/*** [9 1 2 4 3 5 5]** 9* -----------------------------6* ------------------------5* -------------4* -------------------3* --------2* ----1**---------------------------------* 单调递减队列*到 1 的时候 9 在队列中 所以 1是 需要被删除的 时间点为 1*到 2 的时候 9 1 在队列中,要删除2需要先删除1, 时间点为 1 t(1)+1*到 4 的时候 9 2 在队列中,要删除4需要先删除2, 时间点为 2 t(2)+1*到 3 的时候 9 4 在队列中,要删除3不需要先删除其他的值,所以删除3的时间点为1*到 5 的时候 9 4 3 在队列中,要删除5 需要先删除 4,3,所以删除5的时间点为t(4)+1*到 6 的时候 9 5 在队列中,要删除6 需要先删除 5,所以删除6的时间点为t(5)+1*/
AC代码
class Solution {public int totalSteps(int[] nums) {int ans = 0;Stack<int[]> stack = new Stack<>();for (int num : nums) {//要删除当前num 的时间点int maxT = 0;//单调递减队列while (!stack.isEmpty() && stack.peek()[0] <= num) {//左边小于等于num的值都需要在num被删除之前删掉,此时maxT 为删掉左边这些小与等于num的数的最大时间maxT = Math.max(maxT, stack.pop()[1]);}//如果stack 不为空,所有还有左边还有比num值大的情况,表示num需要被删除,如果为空,说明num不用删除if (!stack.isEmpty()) {maxT++;}stack.add(new int[]{num, maxT});ans = Math.max(ans, maxT);}return ans;}
}
LeetCode_2289_使数组按非递减顺序排列相关推荐
- leetcode:6080. 使数组按非递减顺序排列【单调栈 + 合并】
分析 保存一个单调递减的stack,元素是(num, max+t) 遇到大于等于栈顶的,把栈顶的挪出来,然后记录同一次挪出的最大的max_t 如果挪完st还有剩余的话,max_t ++ 然后ans就是 ...
- 34. 在排序数组中查找元素的第一个和最后一个位置给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标
34. 在排序数组中查找元素的第一个和最后一个位置 难度中等2012 给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target.请你找出给定目标值在数组中的开始位置和结束位置. 如果 ...
- leetcode第88题“非递减顺序排列“是什么意思?
我在遇到这个词的时候,确实是影响到了我对题目意思的判断,后来查清楚了. 分享 给大家这个小知识点: 非递减顺序排列即是指:数列递减,但不是单调递减,中间可以有重复. 比如:8,6,6,3,2,1. 1 ...
- 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2
给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目. 请你 合并 nums2 到 nums1 中,使合并 ...
- JS对象 数组排序sort() sort()方法使数组中的元素按照一定的顺序排列。 语法: arrayObject.sort(方法函数)...
数组排序sort() sort()方法使数组中的元素按照一定的顺序排列. 语法: arrayObject.sort(方法函数) 参数说明: 1.如果不指定<方法函数>,则按unicode码 ...
- 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。(js代码)
1.题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的 ...
- 剑指offer:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
剑指offer算法题 二分查找,旋转数组最小数字 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素.例如数组[3, ...
- 6:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转
public class Solution {public int minNumberInRotateArray(int [] array) {int min=array[0];for(int i=1 ...
- Java_[排序子序列]牛牛定义排序子序列为一个数组中一段连续的子序列,并且这段子序列是非递增或者非递减排序的。
链接:https://www.nowcoder.com/questionTerminal/2d3f6ddd82da445d804c95db22dcc471? 牛牛定义排序子序列为一个数组中一段连续的子 ...
最新文章
- Redis初学:8(Hash类型)
- [MySQL] 索引与性能(3)- 覆盖索引
- python中所有保留字首字母都是小写_int是不是python的保留字
- Python安装最新版最详细教程(3.10.2)
- 林俊卿咽音练声法八个步骤(纯净版视频加图文)(转)
- Oracle 配置监听和本地网络服务
- Maven依赖方式引用UEditor的jar包
- html文本框自动填充,html利用文本框input自动填写当前日期
- 机械优化设计c语言鲍威尔法,机械优化设计C语言程序.doc
- 用git和github来拉近和大牛的距离-郭永峰-专题视频课程
- 【数学建模】CUMCM-2011B model5 围捕方案确定
- 小程序毕设作品之微信电子书阅读小程序毕业设计(7)中期检查报告
- 选课系统源码html,高校选课系统 - WEB源码|源代码 - 源码中国
- 数据库审计:DDL与DML
- 模型的偏差与方差的理解
- 马丁福勒《UML精粹》读书笔记_第三章
- 网络舆情舆论信息监督和收集的现代化技术解决方法
- 移动学习 AndroidStudio内存优化分析—hprof文件分析
- C++中的预处理器概述
- 集合添加元素python_Python 集合(set)添加元素-Python 集合(set) add-Python 集合(set) update-嗨客网...