【剑指offer】滑动窗口的最大值
滑动窗口的最大值
http://www.nowcoder.com/questionTerminal/1624bc35a45c42c0bc17d17fa0cba788
题目描述
给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,3,4,2,6,[2,5,1]}。
1、思路分析
使用左右两个指针构成一个滑动窗口,在滑动窗口内遍历寻找最大元素,将最大元素添加进结果集合中,然后再移动滑动窗口,直到右边指针到达数组最后一个元素。
2、代码
import java.util.ArrayList; public class Solution { public ArrayList<Integer> maxInWindows(int [] num, int size) { ArrayList<Integer> result = new ArrayList<>(); if(num.length < size || size <= 0) { return result; } int left = 0, right = size-1; while(right < num.length) { int max = num[left]; for(int i = left; i <= right; i++) { if(num[i] > max) { max = num[i]; } } result.add(max); left++; right++; } return result; } }