LeetCode刷题记录:(6)滑动窗口最大值

LeetCode传送通道

难题不难,快去通关!

在这里插入图片描述

class Solution {
   
    public int[] maxSlidingWindow(int[] nums, int k) {
   
        int n = nums.length;
        // 如果数组长度不超过k个,排序返回其中最大值即可
        if(n<=k){
   
            Arrays.sort(nums);
            return new int[]{
   nums[n-1]};
        }
		
		// 下面是核心代码
        int[] result = new int[n-k+1];
        Deque<Integer> queue = new LinkedList<>();
        
        // 1.为了方便理解,这里先处理前k个数,相当于初始化单调队列和结果数组
        for(int i=0; i<k; i++){
   
            // 新数据入队时,把前面小于该数据的元素移出队列
            offerLastAndPollSmallBefore(queue, nums[i]);
        }
        // 因为队列头部始终是窗口最大值
        result[0] = queue.peekFirst();

        // 2.处理后续数据(别怕,仅仅多了一个判断而已)
        for(int i=k; i<n; i++){
   
            // 判断当前队列的最大元素是否是旧窗口的左边界元素,
            // 如果是则弹出,因为新的窗口将不再包含该元素(可以自行画图理解一下)
            if(queue.peekFirst() == nums[i-k]){
   
                queue.pollFirst();
            }
            offerLastAndPollSmallBefore(queue, nums[i]);
            result[i-k+1] = queue.peekFirst();
        }
        return result;
    }
    
	// 新数据val入队时,把前面小于val的元素移出队列
    private void offerLastAndPollSmallBefore(Deque<Integer> queue, int val){
   
        while (!queue.isEmpty() && val > queue.getLast()){
   
                queue.pollLast();
            }
            queue.offerLast(val);
    }
}

相关推荐

  1. LeetCode-热100:239. 滑动窗口

    2024-02-02 00:34:01       38 阅读
  2. Leetcode】239. 滑动窗口

    2024-02-02 00:34:01       63 阅读
  3. LeetCode】239. 滑动窗口

    2024-02-02 00:34:01       55 阅读
  4. Leetcode 239 滑动窗口

    2024-02-02 00:34:01       55 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-02 00:34:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-02 00:34:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-02-02 00:34:01       82 阅读
  4. Python语言-面向对象

    2024-02-02 00:34:01       91 阅读

热门阅读

  1. Python爬虫-批量爬取免费小说并下载保存到本地

    2024-02-02 00:34:01       118 阅读
  2. Python 机器学习 K-近邻算法

    2024-02-02 00:34:01       61 阅读
  3. go语言-字符串处理的常用函数

    2024-02-02 00:34:01       49 阅读
  4. Docker

    2024-02-02 00:34:01       47 阅读
  5. go install

    2024-02-02 00:34:01       66 阅读
  6. Redis的过期策略和内存淘汰机制

    2024-02-02 00:34:01       50 阅读
  7. Spring Cloud Gateway 修改请求体、响应体

    2024-02-02 00:34:01       50 阅读
  8. 重回一年级,请问你们还知道余数是什么吗

    2024-02-02 00:34:01       42 阅读
  9. Git分布式版本控制系统

    2024-02-02 00:34:01       52 阅读
  10. 【LNMP】RHEL8.3安装LNMP并配置freetds连接MSSQL

    2024-02-02 00:34:01       47 阅读