码迷,mamicode.com
首页 > 其他好文 > 详细

剑指 Offer 59 - I. 滑动窗口的最大值 + 双指针 + 双端队列

时间:2021-02-16 12:10:19      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:dong   mamicode   public   最大   https   code   null   add   -o   

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

Offer_59_1

题目详情

技术图片

方法一:暴力方法+双指针

package com.walegarrett.offer;

/**
 * @Author WaleGarrett
 * @Date 2021/2/12 18:06
 */

import java.util.Arrays;
import java.util.Deque;
import java.util.LinkedList;

/**
 * 题目详情:给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。
 */

/**
 * 方法一:暴力法 + 左右指针
 */
public class Offer_59_1 {
    public int[] maxSlidingWindow(int[] nums, int k) {
        if(nums == null || nums.length==0)
            return new int[0];
        int len = nums.length;
        int[] result = new int[len-k+1];
        int cnt = 0;
        for(int l=0,r=k-1;r<len;l++,r++){
            int max=-0x3f3f3f3f;
            for(int i=l;i<=r;i++){
                max = Math.max(max, nums[i]);
            }
            result[cnt++] = max;
        }
        return result;
    }
}

方法二:使用双端队列

技术图片

/**
 * 方法二:使用双端队列维护滑动窗口的最大值
 */
class Offer_59_1_2 {
    public int[] maxSlidingWindow(int[] nums, int k) {
        if(nums == null || nums.length==0)
            return new int[0];
        int len = nums.length;
        int[] result = new int[len-k+1];
        Deque<Integer> deque = new LinkedList<>();
        for(int l=1-k,r=0;r<len;l++,r++){
            if(l>0 && deque.peekFirst() == nums[l-1])
                deque.pollFirst();//删除窗口左边的元素
            while(!deque.isEmpty() && deque.peekLast()<nums[r]){
                deque.pollLast();//保持deque递减
            }
            deque.addLast(nums[r]);
            if(l>=0)
                result[l] = deque.peekFirst();
        }
        return result;
    }
}

技术图片

参考题解:面试题59 - I. 滑动窗口的最大值(单调队列,清晰图解)

剑指 Offer 59 - I. 滑动窗口的最大值 + 双指针 + 双端队列

标签:dong   mamicode   public   最大   https   code   null   add   -o   

原文地址:https://www.cnblogs.com/GarrettWale/p/14399093.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!