对于每个最后会被保留下来的数字,因为其一定是升序的,所以可以以其为标杆,存入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