Leetcode 2289. Steps to Make Array Non-decreasing [Python]

对于每个最后会被保留下来的数字,因为其一定是升序的,所以可以以其为标杆,存入stack中,假设为A。加入下一个会最后保留的数字是B,那A和B之间如果有数字,其都是小于A的(也小于B),假设为a1, a2吧,那a1一定是第一轮可以被消除的,假设a1< a2,那么a2一定是第二轮由A 紧挨着a2,且A > a2来消除,而如果是a1 >= a2, 那么a2也是第一轮就可以消除了。也就是while循环里所需要的处理。否则就是第一轮被除去,val == 1.每个标杆都不用被除去,也就是stack为空的时候,(前面的数字都被处理好了),val设置为0. res取全局最大值就好。

class Solution:
    def totalSteps(self, nums: List[int]) -> int:
        res = 0
        val = 1
        stack = []
        for num in nums:
            val = 1
            while stack and stack[-1][0] <= num:
                val = max(val, stack.pop(-1)[1] + 1)
            if not stack:
                val = 0
            stack.append((num, val))
            res = max(res, val)
        return res
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值