leetcode滑动窗口(leetcode滑动窗口万能公式)

技术LeetCode怎样找出滑动窗口的最大值小编给大家分享一下LeetCode怎样找出滑动窗口的最大值,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一

边肖将与您分享LeetCode如何找出滑动窗口的最大值。相信大部分人还不太了解,所以分享这篇文章给大家参考。希望大家看完这篇文章后收获多多。让我们一起来发现吧!

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

00-1010输入: 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

00-1010考虑到这个问题的数组要求,头可以进,可以删,尾可以进,可以删,所以用的是得克得克。使用德格的单调的德格LinkedList实现。

所谓单调性,就是我们人为指定存储的元素从队列的头到尾依次递减(或递增)。

也就是说,我们维持着单调的双向队列。每次窗口滑动时,我都会从队列头取当前窗口中的最大值。每次窗口中出现一个元素,我都会将其大小与队列中的元素进行比较:

如果刚进来的元素比队列末尾的元素大,那么先弹出队列末尾的元素,再把刚进来的元素加到队列末尾;

如果刚进来的元素小于队列末尾的元素,只需将刚进来的元素直接添加到队列末尾。

因此,窗口的最大值可以通过这种可以从头部和尾部进出的结构来保持。

题目描述:

#-*-coding : utf-8-*-

类别解决方案:

defmaxInWindows(自身,数量,大小):

#writecodehere

#存储可能是最大值的下标

maxqueue=[]

#存储窗口中的最大值

maxlist=[]

n=透镜(数量)

#参数检查

ifn==0orsize==0orsizen:

returnmaxlist

foriirange(n):

#确定对应于队列头下标的元素是否滑出窗口。

iflen(max queue)0 Andi-size=max queue[0]:

(=NationalBureauofStandards)国家标准局

p;  maxqueue.pop(0)
            while len(maxqueue) > 0 and num[i] > num[maxqueue[-1]]:
                maxqueue.pop()
            maxqueue.append(i)
            if i >= size – 1:
                maxlist.append(num[maxqueue[0]])
        return maxlist

 
 

java代码:

class Solution {
    public int[] maxSlidingWindow(int[] nums, int k) {
        Deque<Integer> deque=new LinkedList<>();
        int len=nums.length;
        if(len==0 ||k==0 ){
            return new int[0] ;
        }
        int[] res=new int[len-k+1];
        
        for(int i=0;i<k;i++){
            while(!deque.isEmpty() && nums[i]>deque.peekLast()){
                deque.removeLast(); //比队列元素大就弹出队尾数据
            
            }
            deque.addLast(nums[i]);//不走循环直接加到队列末尾
            
        }
        res[0]=deque.peekFirst();
        for(int i=k;i<len;i++){
            // 如果滑动窗口已经略过了队列中头部的元素,则将头部元素弹出
            if(deque.peekFirst() == nums[i - k]){
                deque.removeFirst();//
            }
            while(!deque.isEmpty() && deque.peekLast() < nums[i]){
                deque.removeLast();
            }
            deque.addLast(nums[i]);
            res[i - k + 1] = deque.peekFirst();


        }
        return res;
    }
}

以上是“LeetCode怎样找出滑动窗口的最大值”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/147019.html

(0)

相关推荐

  • 几何平均,什么是算术平均值和几何平均值

    技术几何平均,什么是算术平均值和几何平均值算术平均数(Arithmetic mean)是表征数据集中趋势的一个统计指标。 它是一组数据之和,除以这组数据之个/项数。算术平均数在统计学上的优点,就是它较中位数、众数更少受到

    生活 2021年10月20日
  • 如何打补丁PSU

    技术如何打补丁PSU这篇文章主要讲解了“如何打补丁PSU”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何打补丁PSU”吧!首先说一下下载补丁和最新opatch的方法:都

    攻略 2021年11月15日
  • mariadb与mysql的区别是什么

    技术mariadb与mysql的区别是什么这篇文章主要讲解了“mariadb与mysql的区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mariadb与mysq

    攻略 2021年12月2日
  • 没插耳机显示耳机模式怎么办,手机成耳机模式了怎么办

    技术没插耳机显示耳机模式怎么办,手机成耳机模式了怎么办手机成耳机模式有两种情况 没插耳机显示耳机模式怎么办:第一  就是你在设置里调成的耳机模式 第二   你的手机耳机插孔在你插入耳机的时候被插坏了 把里面的铜片接触到了

    生活 2021年10月30日
  • 和田玉价格走势,和田玉价格是怎样涨起来的

    技术和田玉价格走势,和田玉价格是怎样涨起来的以下是鸿璐的一些浅见和田玉价格走势,希望对您有所帮助和田玉历史悠久,从古至今备受人们喜爱!和田玉润更是以其优秀的润度屹立于玉石行列的顶端!和田玉的“羊脂白玉”更是以其白中有润,

    生活 2021年10月22日
  • 4p理论,对4p营销理论怎么理解

    技术4p理论,对4p营销理论怎么理解4P营销理论4p理论:4P营销理论被归结为四个基本策略的组合,即产品(Product)、价格(Price)、渠道(Place)、促销(Promotion),由于这四个词的英文字头都是P

    生活 2021年10月28日