题解 | #滑动窗口的最大值#
滑动窗口的最大值
http://www.nowcoder.com/practice/1624bc35a45c42c0bc17d17fa0cba788
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;
}
}