[代码随想录]Day50-单调栈part01

题目:739. 每日温度

思路:

要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,此时我们就要想到可以用单调栈了
维护一个 栈顶->栈底 由小到大的栈;这样在之后(右侧)遇到更大的数时,就可以得到所有在他前面并且比他小的数,就能获得结果。
初始化默认为0;

代码:

func dailyTemperatures(num []int) []int {
    res := make([]int, len(num))
    stack := []int{}
    for i, v := range num {
        for len(stack) != 0 && v > num[stack[len(stack)-1]] {
            top := stack[len(stack)-1]
            stack = stack[:len(stack)-1]
            res[top] = i - top
        }
        stack = append(stack, i)
    }
    return res
}

参考:

代码随想录

题目:496. 下一个更大元素 I

思路:

比上面一个题多了一步,如果只有nums2那么这道题和上面一样,多了一步是需要按照nums1的顺序把nums2的结果输出。

代码:

func nextGreaterElement(nums1 []int, nums2 []int) []int {
    res := make([]int, len(nums1))
    mp := make(map[int]int)
    for i := 0; i <len(nums1); i++ {
        res[i] = -1
        mp[nums1[i]] = i
    }
    stack := []int{}
    stack = append(stack, 0)
    for i := 1; i < len(nums2); i++ {
        for len(stack) > 0 && nums2[i] > nums2[stack[len(stack)-1]] {
            top := stack[len(stack)-1]
            if _, ok := mp[nums2[top]]; ok {
                index := mp[nums2[top]]
                res[index] = nums2[i]
            }
            stack = stack[:len(stack)-1]
        }
        stack = append(stack, i)
    }
    return res
}

参考:

代码随想录

posted @   WtcSky  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示