题解 | #滑动窗口的最大值# | JAVA | 自己写单调队列实现

滑动窗口的最大值

http://www.nowcoder.com/practice/1624bc35a45c42c0bc17d17fa0cba788

运行时间:13ms
超过77.89% 用Java提交的代码
占用内存:9656KB
超过14.87%用Java提交的代码

编写一个单调队列

这个队列要有如下功能:

  1. 具有MAX函数, 获取当前队列最大值

  2. 获取o(1)

    public class SingleQueue {
     LinkedList<Integer> q = new LinkedList<>();
     public void push(int n) {
         // 将小于 n 的元素全部删除
         while (!q.isEmpty() && q.getLast() < n) {
             q.pollLast();
         }
         // 然后将 n 加入尾部
         q.addLast(n);
     }
    
     public int max() {
         return q.getFirst();
     }
    
     public void pop(int n) {
         if (n == q.getFirst()) {
             q.pollFirst();
         }
     }
    }

进行代码编写

import java.util.*;
public class Solution {

    public ArrayList<Integer> maxInWindows(int [] nums, int k) {
        ArrayList<Integer> result = new ArrayList<>();
        if(nums.length == 0){return result;}
        SingleQueue window = new SingleQueue();

        for (int i = 0; i < nums.length && k > 0 ; i++) {
            //少进一个人
            if (i < k - 1) {
                window.push(nums[i]);
            } else {
                //进入
                window.push(nums[i]);
                //找到最大的
                result.add(window.max());
                //出去
                window.pop(nums[i - k + 1]);
            }
        }
        return result;
    }
}
全部评论

相关推荐

2025-12-29 20:37
已编辑
清华大学附属小学 Java
哇哇的菜鸡oc:1.为什么要写这么多内容呀 2.什么叫做简历 3.什么样的内容可以写到简历上 4.项目可以包装,但是要有理有据呀,不能乱包装呀,比如 跨境能达到日均120万订单的在国内都是能叫的上名字的,而且这些工作也基本上不太会交给一个实习生去做 建议友友可以去网上或者找同学的简历看看,他们的简历是怎么写的,去找找上面的那四个问题的答案吧,然后要记住的是Java是服务于业务的,而不是服务于微服务或者技术的
最后再改一次简历
点赞 评论 收藏
分享
码农索隆:以下是我以我微薄的认知提供的建议: 1.考个教师资格证,去当体育考试。 2.去健身房当健身教练(因为在我印象里面体育生身材都不错)。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务