Day61 739. 每日温度、496.下一个更大元素 I

739. 每日温度

        创建并存储下标的递增单调栈(从栈口到栈底递增),每次遍历都可以利用循环(比自己小就弹出)找到比自己大的元素(或没有),再将自己下标添加进单调栈

class Solution:
    def dailyTemperatures(self, temperatures: List[int]) -> List[int]:
        n = len(temperatures)
        tmp = [n - 1]
        ans = [0]
        for i in range(n - 2, -1, -1):
            while tmp and temperatures[i] >= temperatures[tmp[-1]]:
                tmp.pop()
            if not tmp:
                ans.append(0)
            else:
                ans.append(tmp[-1] - i)
            tmp.append(i)
        return ans[::-1]

 

496.下一个更大元素 I 

但从单调栈来看,难度不应该是简单

单调栈的运用与上题相同,但是这道题多了个处理结果位置的步骤(利用字典),方式如下

        ans = [-1]
        n, m = len(nums1), len(nums2)
        tmp = [m - 1]
        dic = dict()
        for i, x in enumerate(nums1):
            dic[x] = i

然后就跟上题一样处理,并将结果放入nums1即可 

        for i in range(m - 2, -1, -1):
            while tmp and nums2[i] >= nums2[tmp[-1]]:
                tmp.pop()
            if tmp:
                ans.append(nums2[tmp[-1]])
            else:
                ans.append(-1)
            tmp.append(i)
        ans = ans[::-1]
        for i, x in enumerate(nums2):
            if x in dic:
                nums1[dic[x]] = ans[i]
        return nums1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值