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

发布时间 2023-09-21 10:24:40作者: WtcSky

题目:

思路:

要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,此时我们就要想到可以用单调栈了

代码:

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
}

参考:

代码随想录