public class Solution {
    // 若当前最大值的下标在滑动窗口内, 那么 新的最大值的 为 当前滑动窗口最后一个值或者 当前最大值
    // 若当前最大值的下标不在滑动窗口内, 那么在窗口内找最大值
    public ArrayList<Integer> maxInWindows(int [] num, int size) {
        int maxIndex = -1;
        ArrayList<Integer> returnList = new ArrayList<>();
        if(size == 0){
            return returnList;
        }
        for(int i = 0; i < num.length - size + 1; i++){
            if(maxIndex >= i && maxIndex <= i + size - 1){ // 最小值下标在当前滑动窗口范围之内
                maxIndex = num[maxIndex] >= num[i + size -1] ? maxIndex : i + size -1;
                returnList.add(num[maxIndex]);
            }else{
                // 在当前窗口内查找最小值
                maxIndex = i;
                for(int j = i + 1; j <= i + size -1; j++){
                    if(num[j] > num[maxIndex]){
                        maxIndex = j;
                    }
                }
                returnList.add(num[maxIndex]);
            }
        }
        return returnList;
    }
}