首页 > 其他分享 >剑指 Offer 59 - I. 滑动窗口的最大值

剑指 Offer 59 - I. 滑动窗口的最大值

时间:2023-09-11 17:25:58浏览次数:59  
标签:元素 59 nums int res 最大值 Offer len 滑动

题目链接: 剑指 Offer 59 - I. 滑动窗口的最大值

题目描述:

给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。

解法思路:
单调队列:

  • 维护一个单调的队列,队列中保存的是对应数字的数组下标
  • 每新加进来一个元素,首先删除队头(超出滑动窗口的范围的值)
  • 然后比较当前元素与队尾元素,删除哪些比当前元素小的队尾元素
  • 最后,将当前的队头元素加到res中

代码:

func maxSlidingWindow(nums []int, k int) []int {
    var res []int
    n := len(nums)
    if n == 0 {
      return res
    }
    var q []int  //单调队列(里面存的是下标)
    for i:=0; i < n ;i++{
      //去除对头多余的元素
      for len(q) > 0 && i-k >= q[0] {
          q = q[1:]
      }
      // 去除队尾比当前值小的元素(这里等于也要删掉)
      for len(q) > 0 && nums[q[len(q)-1]] <= nums[i]{
         q = q[:len(q)-1]
      } 
      // 将当前元素的下标加入到队列q中
      q = append(q,i)
      // 队头元素就是窗口的最大值
      if i >= k - 1 {
        res = append(res,nums[q[0]])
      }
    }
    return res
}

标签:元素,59,nums,int,res,最大值,Offer,len,滑动
From: https://www.cnblogs.com/lxing-go/p/17694001.html

相关文章

  • 剑指 Offer 56 - II. 数组中数字出现的次数 II
    题目链接:剑指Offer56-II.数组中数字出现的次数II题目描述:在一个数组nums中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。解法思路:代码:......
  • 剑指 Offer 57 - II. 和为s的连续正数序列
    题目链接:剑指Offer57-II.和为s的连续正数序列题目描述:输入一个正整数target,输出所有和为target的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。解法思路:双指针:当总和小于target时,j指针向后移动,直到大于或等于停......
  • 【学习笔记】P8590 『JROI-8』这是新历的朝阳,也是旧历的残阳
    比较有思维的一个数学题,写个笔记纪念一下。显然,为了使$\sum\limits_{i=1}^na_i^2$最大,整数一定要放最后一段,即求$\sum\limits_{i=1}^n(a_i+m)^2$,而负数需要分情况考虑,即放第一段还是最后一段,中间的$m-2$是空段,只考虑$1$和$m$这两个极端情况。可以设中间节点$t$,$a_{i......
  • Java版剑指offer:平衡二叉树
    Java版剑指offer:平衡二叉树描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树平衡二叉树(BalancedBinaryTree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉......
  • java版本剑指offer:链表中倒数最后k个结点
    java版本剑指offer:链表中倒数最后k个结点描述输入一个链表,输出一个链表,该输出链表包含原链表中从倒数第k个结点至尾节点的全部节点。如果该链表长度小于k,请返回一个长度为0的链表。最简单的方式就是使用两个指针,第一个指针先移动k步,然后第二个指针再从头开始,这个时候这两个指针......
  • java版本剑指offer:反转链表
    java版本剑指offer:反转链表描述输入一个链表,反转链表后,输出新链表的表头。示例1输入:{1,2,3}返回值:{3,2,1}此题想考察的是:如何调整链表指针,来达到反转链表的目的。初始化:3个指针:1)pre指针指向已经反转好的链表的最后一个节点,最开始没有反转,所以指向null2)cur指针指向待反转链表......
  • java剑指offer:两个链表的第一个公共结点
    java剑指offer:两个链表的第一个公共结点描述输入两个无环的单链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)解题思路:先假设链表A头结点与结点8的长度与链表B头结点与结点8的长度相等,那么就可以用双指针。......
  • Java版剑指offer:链表中环的入口结点
    Java版剑指offer:链表中环的入口结点描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。输入描述:输入分为2段,第一段是入环前的链表部分,第二段是链表环的部分,后台将这2个会组装成一个有环或者无环单链表返回值描述:返回链表的环的入口结点即可。而我们后台程序......
  • java版本剑指offer:二分查找
    java版本剑指offer:二分查找描述请实现有重复数字的升序数组的二分查找给定一个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的第一个出现的target,如果目标值存在返回下标,否则返回-1示例1输入:[1,2,4,4,5],4返回值:2说明:从左到右,查找到第1个为4的......
  • java版本剑指offer:在二叉树中找到两个节点的最近公共祖先
    java版本剑指offer:在二叉树中找到两个节点的最近公共祖先描述给定一棵二叉树(保证非空)以及这棵树上的两个节点对应的val值o1和o2,请找到o1和o2的最近公共祖先节点。注:本题保证二叉树中每个节点的val值均不相同。示例1输入:[3,5,1,6,2,0,8,#,#,7,4],5,1返回值:3方法一:递......