题解 | #滑动窗口的最大值#

滑动窗口的最大值

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

import java.util.*;
public class Solution {
    public ArrayList<Integer> maxInWindows(int [] num, int size) {
        ArrayList<Integer> res = new ArrayList<>();
        if (num == null) return res;
        int len = num.length;
        if (len == 0 || len < size || size == 0) return res;
        int maxNum = Integer.MIN_VALUE;
        for (int i = 0; i < len - size + 1; ++i) {
            if (i == 0) {
                for (int j = i; j < size; ++j) {
                    maxNum = Math.max(maxNum, num[j]);
                }
            } else {
                if (num[i + size - 1] > maxNum) maxNum = num[i + size - 1];
                else if (num[i - 1] == maxNum) {
                    maxNum = Integer.MIN_VALUE;
                    for (int j = i; j < size + i; ++j) {
                        maxNum = Math.max(maxNum, num[j]);
                    }
                }
            }
            res.add(maxNum);
        }
        return res;
    }
}

当窗口从下标 0 开始时需要遍历一次窗口大小来寻找最大值,而在此后可以判断当前最大值和所要添加值之间的大小以及判断即将离开窗口的值是否等于当前的最大值,然后再去判断是否需要再次遍历寻找最大值。

全部评论

相关推荐

hso_:哈哈哈哈哈哈我没offer一样在同一道题开喷了
投递深圳同为数码等公司10个岗位
点赞 评论 收藏
分享
10-25 12:05
已编辑
湖南科技大学 Java
若梦难了:我有你这简历,已经大厂乱杀了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务