首页 > 其他分享 >滑动窗口最大值

滑动窗口最大值

时间:2023-01-02 16:25:57浏览次数:57  
标签:窗口 nums int 最大值 queue 滑动

滑动窗口最大值

给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。

返回 滑动窗口中的最大值

示例 1:

输入:nums = [1,3,-1,-3,5,3,6,7], k = 3
输出:[3,3,5,5,6,7]
解释:
滑动窗口的位置                最大值
---------------               -----
[1  3  -1] -3  5  3  6  7       3
 1 [3  -1  -3] 5  3  6  7       3
 1  3 [-1  -3  5] 3  6  7       5
 1  3  -1 [-3  5  3] 6  7       5
 1  3  -1  -3 [5  3  6] 7       6
 1  3  -1  -3  5 [3  6  7]      7

示例 2:

输入:nums = [1], k = 1
输出:[1]

提示:

  • 1 <= nums.length <= 105
  • -104 <= nums[i] <= 104
  • 1 <= k <= nums.length
func maxSlidingWindow(nums []int, k int) []int {
    queue:=NewMyQueue()
    length := len(nums)
    res:=make([]int,0)
    //先将k个元素加入队列
    for i:=0;i<k;i++{
        queue.push(nums[i])
    }
    // 记录前k个元素的最大值
    res=append(res,queue.Front())
    for i:=k;i<length;i++{
        queue.pop(nums[i-k])
        queue.push(nums[i])
        res=append(res,queue.Front())
    }
    return res


}

func (m *MyQueue) pop(val int){
    if len(m.queue)!=0 && val==m.Front(){
        m.queue=m.queue[1:]
    }

}

func (m *MyQueue) push(val int){
    for len(m.queue)!=0 && val>m.queue[len(m.queue)-1]{
        m.queue=m.queue[:len(m.queue)-1]
    }
    m.queue = append(m.queue, val)

}

func (m *MyQueue) Front() int {
    return m.queue[0]
}

type MyQueue struct {
    queue []int
}

func NewMyQueue() *MyQueue {
    return &MyQueue{
        queue: make([]int, 0),
    }
}


标签:窗口,nums,int,最大值,queue,滑动
From: https://www.cnblogs.com/suehoo/p/17020034.html

相关文章

  • Redis的自增也能实现滑动窗口限流?
    限流是大家开发之路上一定会遇到的需求。比如:限制一定时间内,接口请求请求频率;一定时间内用户发言、评论次数等等,类似于滑动窗口算法。这里分享一份拿来即用的代码,一起看看......
  • 力扣239 滑动窗口最大值
    题目:给你一个整数数组nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的k 个数字。滑动窗口每次只向右移动一位。返回......
  • Android实现导航菜单左右滑动效果
    今天给大家介绍在Android中实现顶部导航菜单左右滑动效果的二种解决方案。第一种解决方案: 在以前的一篇博文中我使用android-support-v4.jar实现了左右滑动指引效果,有兴趣......
  • cmd窗口中java命令报错。错误:找不到或无法加载主类 java的jdk安装过程中踩过的坑
    错误:找不到或无法加载主类HelloWorld遇到这个问题时,我尝试过网上其他人的做法。有试过添加classpath,也有试过删除classpath。但是依然报错,这里javac可以编译通过,说明......
  • qt 增加新窗口
    添加UI界面新建里面选择qddesignerformclass,就会自动生成ui文件,c和h文件。使用新ui在mainwindow.cpp中,可以引入新ui的头文件,然后在button的槽函数中,n......
  • 双指针(leetcode easy 977)、滑动窗口(leetcode medium 209)、模拟旋转前进(leetcode
    双指针题目链接:https://leetcode.cn/problems/squares-of-a-sorted-array/思路:因题目所给数组为有序数组(有正有负),所以平方后数值从大到小肯定是从数组两边向内......
  • STM32 窗口看门狗中的喂狗操作具体是指什么
    是指清空看门狗计数器,看门狗实际上就是一个定时计数器,用来防止程序发生意外而设置的一个监测装置,只要看门狗功能打开,看门狗计数器的计数值是会不停的增加,程序正常运行时,需......
  • 弹出窗口【DOM】
    方案一:(推荐)   语法:      oNewWindow=window.open([sURL][,sName][,sFeatures][,bReplace])  参数说明:      sURL   给要......
  • 【转】30张图解: TCP 重传、滑动窗口、流量控制、拥塞控制
     原文:https://www.cnblogs.com/xiaolincoding/p/12732052.html  ---------------------------------------------------前言前一篇「硬不硬你说了算!近40张图解......
  • win32编程 -- 窗口注册与创建
    你学不进的东西有人学,你不经历的有人经历,你吃不了的苦有人吃,想让人望而生畏,就要拿出常人百倍的野心去奋斗。。。---- 网易云热评 一、窗口类窗口类包含了窗口的各种参数......