【python】第十二天打卡 单调栈

于妍 2023-02-13 23:13:37

 思路

n = int(input())
li = list(map(int,input().split()))
stack=[0]*100010
tt=0
for i in range(n):
    while(tt and stack[tt]>=li[i]):
        tt-=1  # 如果栈顶元素大于当前待入栈元素,则出栈
    if tt==0:
        print("-1",end=' ') # 如果栈空,则没有比该元素小的值。
    else:
        print(stack[tt],end=" ")  # 栈顶元素就是左侧第一个比它小的元素。
    tt+=1
    stack[tt]=li[i]
    
    

 另一种

n = int(input())
li = map(int,input().split())
res = []
ans = []
for i in li:
    if not res:
        res.append(i)
        ans.append(str(-1))
        continue
    else:
        while i <= res[-1]:
            res.pop()
            if not res:
                res.append(i)
                ans.append(str(-1))
                break
        else:
            ans.append(str(res[-1]))
            res.append(i)
print(" ".join(ans))

总结

 

...全文
9 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

30,342

社区成员

发帖
与我相关
我的任务
社区描述
打造最热爱学习的高校社区,帮助大家提升计算机领域知识,带大家打比赛拿奖,提高自我,希望大家共同创造良好的社区氛围。
社区管理员
  • 川川菜鸟
  • 亡心灵
  • 星辰菜鸟
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

监督大家学习,每日学习打卡,以投稿形式打卡。扫码关注公众号,可加入粉丝群和领取大量资源。

试试用AI创作助手写篇文章吧