描述
给你一个下标从 0 开始的整数数组 nums 。在一步操作中,移除所有满足 nums[i - 1] > nums[i] 的 nums[i] ,其中 0 < i < nums.length 。
重复执行步骤,直到 nums 变为 非递减 数组,返回所需执行的操作数。
分析
- 一个元素要不要被移除取决于它的左侧有没有比他更大的数字。
- 借助一个从上到下是递增的栈,用来寻找当前元素的左边第一个大于它的元素。
- 一个元素经过多少次操作才能被移除取决于它与左侧第一个大于它的元素之间的元素,等于这些元素最大操作次数的再加1。意思就是说,只有那个需要最大操作次数的中间元素被移除之后,当前元素才有能被左侧第一个大于它的元素移除。
class Solution {
public int totalSteps(int[] nums) {
Stack<int[]> stack = new