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

滑动窗口的最大值

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

全部评论

相关推荐

邮小鼠:粤嵌的项目水的要死 来我们学校带过课程实习 项目名字是车机终端 实际上就是写了了个gui 还是老师把代码发给你你改改的那种
点赞 评论 收藏
分享
我是小红是我:学校换成中南
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务