• 代码随想录训练营 单调栈


    代码随想录训练营 单调栈

    有点意思

    739. 每日温度🌸

    给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。

    func dailyTemperatures(temperatures []int) []int {
        res := make([]int, len(temperatures))
        // 初始化栈顶元素为第一个下标索引0
        stack := []int{0}
    
        for i := 1; i < len(temperatures); i++ {
            top := stack[len(stack)-1]
            if temperatures[i] < temperatures[top] {
                stack = append(stack, i)
            } else if temperatures[i] ==  temperatures[top] {
                stack = append(stack, i)
            } else {
                for len(stack) != 0 && temperatures[i] > temperatures[top] {
                    res[top] = i - top
                    stack = stack[:len(stack)-1]
                    if len(stack) != 0 {
                        top = stack[len(stack)-1]
                    }
                }
                stack = append(stack, i)
            }
        }
        return res
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    496. 下一个更大元素 I🌸

    nums1 中数字 x 的 下一个更大元素 是指 x 在 nums2 中对应位置 右侧 的 第一个 比 x 大的元素。
    给你两个 没有重复元素 的数组 nums1 和 nums2 ,下标从 0 开始计数,其中nums1 是 nums2 的子集。
    对于每个 0 <= i < nums1.length ,找出满足 nums1[i] == nums2[j] 的下标 j ,并且在 nums2 确定 nums2[j] 的 下一个更大元素 。如果不存在下一个更大元素,那么本次查询的答案是 -1 。
    返回一个长度为 nums1.length 的数组 ans 作为答案,满足 ans[i] 是如上所述的 下一个更大元素 。

    func nextGreaterElement(nums1 []int, nums2 []int) []int {
        res := make([]int, len(nums1))
        for i := range res { res[i] = -1 }
        m := make(map[int]int, len(nums1))
        for k, v := range nums1 { m[v] = k }
    
        stack := []int{0}
        for i := 1; i < len(nums2); i++ {
            top := stack[len(stack)-1]
            if nums2[i] < nums2[top] {
                stack = append(stack, i)
            } else if nums2[i] == nums2[top] {
                stack = append(stack, i)
            } else {
                for len(stack) != 0 && nums2[i] > nums2[top] {
                    if v, ok := m[nums2[top]]; ok {
                        res[v] = nums2[i]
                    }
                    stack = stack[:len(stack)-1]
                    if len(stack) != 0 {
                        top = stack[len(stack)-1]
                    }
                }
                stack = append(stack, i)
            }
        }
        return res
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
  • 相关阅读:
    [GWCTF 2019]枯燥的抽奖 mt_rand 伪随机数
    视频教程下载:用ChatGPT玩转海外抖音TikTok
    java专题练习(抢红包)
    kafka 单节点部署
    题目0107-分积木
    atoi函数
    R语言作业--第六章判别分析
    kafka管理工具之kafka-ui的环境搭建笔记
    蓝桥杯官网练习题(上三角方阵)
    JAVA面试八股文----Mybatis
  • 原文地址:https://blog.csdn.net/qq_41722524/article/details/133128441