题解 | #滑动窗口的最大值#

滑动窗口的最大值

https://www.nowcoder.com/practice/1624bc35a45c42c0bc17d17fa0cba788

package main


/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param num int整型一维数组
 * @param size int整型
 * @return int整型一维数组
 */
func maxInWindows( num []int ,  size int ) []int {
    // write code here
    if size == 0 || size > len(num) {
        return []int{}
    }

    var ans []int
    var dque []int //维护一个单调队列,存的是下标, 队首的位置是最大值

    for i := 0; i < len(num); i++ {

        // 1. 加入元素之前 从队尾 pop 掉比当前小的元素

        // 2. 控制窗口的大小,如果超出 (dque[0] <=  i - size),弹出队头

        // 3. 加入元素

        // 4. 记录结果, 当 i > = size 的时候开始记录 


        for len(dque) > 0 && num[dque[len(dque)-1]] <= num[i] {
            dque = dque[:len(dque)-1]
        }

        if len(dque) > 0 && dque[0] <= i - size {
            dque = dque[1:]
        }

        dque = append(dque, i)
        
        if i >= size - 1 {
            ans = append(ans, num[dque[0]])
        }

    }
    return ans

}

全部评论

相关推荐

牛客737698141号:他们可以看到在线简历的。。。估计不合适直接就拒了
点赞 评论 收藏
分享
研一开学九月份速成的Java,项目是苍穹外卖和黑马点评,算法基础不好,八股文较为熟练,想找份小厂日常实习,希望牛友们给点意见,蟹蟹啦
求offer的花生米很聪敏:三个月学了这么多?spring springmvc mybatis springboot jvm juc,还做完了两个项目,还熟悉八股,会点算法。卧槽,我该反思了。我暑假开始的,就做了外卖,spring springmvc boot 那些原理好多都忘了,还在刷 jvm 视频,八股和算法也没开始
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务