题解 | #单调栈结构#

单调栈结构

http://www.nowcoder.com/practice/e3d18ffab9c543da8704ede8da578b55

本题解使用从栈顶到栈底单调递减的栈。

遍历整个数组的索引,若栈为空,则将该索引放入栈里,若栈不为空,则比较栈顶索引对应的值与当前遍历到的索引对应的值。

1、若栈顶索引对应的值较小,则继续将当前遍历到的索引放入栈中

2、若栈顶索引对应的值较大,则将该索引从栈顶弹出。


_ = input()
nums = list(map(int, input().split()))

stack = []
ans = [[-1, -1] for _ in range(len(nums))]

for i in range(len(nums)):
    while stack and nums[stack[-1]] > nums[i]:
        ans[stack[-1]][1] = i
        stack.pop()
    if stack:
        if nums[stack[-1]] < nums[i]:
            ans[i][0] = stack[-1]
        elif nums[stack[-1]] == nums[i]:
            ans[i][0] = ans[stack[-1]][0]
    stack.append(i)

for i, j in ans:
    print(i, j)

全部评论

相关推荐

05-26 22:25
门头沟学院 Java
Java小肖:不会是想叫你过去把你打一顿吧,哈哈哈
点赞 评论 收藏
分享
程序员牛肉:主要是因为小厂的资金本来就很吃紧,所以更喜欢有实习经历的同学。来了就能上手。 而大厂因为钱多,实习生一天三四百的就不算事。所以愿意培养你,在面试的时候也就不在乎你有没有实习(除非是同级别大厂的实习。) 按照你的简历来看,同质化太严重了。项目也很烂大街。 要么换项目,要么考研。 你现在选择工作的话,前景不是很好了。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务