[代码随想录]Day51-单调栈part02

题目:503. 下一个更大元素 II

思路:

总之就是走两次nums,可以拼接,也可以用下面的取余方式。

代码:

func nextGreaterElements(nums []int) []int {
    lens := len(nums)
    res := make([]int, lens)
    for i := 0; i < lens; i++{
        res[i] = -1
    }
    stack := make([]int,0)
    for i:=0; i < lens * 2; i++ {
        for len(stack) > 0 && nums[i%lens] > nums[stack[len(stack)-1]] {
            index := stack[len(stack) - 1]
            stack = stack[:len(stack)-1]
            res[index] = nums[i%lens]
        }
        stack = append(stack, i%lens)
    }
    return res
}

参考:

代码随想录

题目:42. 接雨水

思路:

这个双指针容易想也容易做,找到一个位置左右最高点,然后选其中小的一个减去当前位置高度就是蓄水能力(负数就去掉)。

代码1:

双指针法

func trap(height []int) int {
    lens := len(height)
    lh := make([]int, lens)
    rh := make([]int, lens)
    lh[0] = height[0]
    rh[lens-1]= height[lens-1]
    res := 0
    for i:=1; i<lens;i++ {
        lh[i] = max(lh[i-1],height[i])
    }
    for i := lens-2; i>=0;i-- {
        rh[i] = max(rh[i+1], height[i])
    }
    for i:=1;i<=lens-2;i++ {
        h := min(rh[i], lh[i]) - height[i]
        if h > 0 {
            res += h
        }
    }
    return res
}
func max(a,b int)int{
    if a>b{
        return a
    }
    return b
}
func min(a,b int)int{
    if a<b{
        return a
    }
    return b
}

参考:

代码随想录

posted @   WtcSky  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示