概述
64. 滑动窗口的最大值
题目链接
来源:剑指Offer
链接:https://www.nowcoder.com/practice/1624bc35a45c42c0bc17d17fa0cba788?tpId=13&&tqId=11217&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
题目描述
给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{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,3,4,2,6,2,5,1],3
返回值
复制
[4,4,6,6,6,5]
题目分析
应用窗口的注意事项
滑动窗口的长度可以固定,也可以是可变的,根据题目要求
可以通过两个指针来标识窗口的边界
import java.util.*;
public class Solution {
public ArrayList<Integer> maxInWindows(int [] num, int size)
{
ArrayList<Integer> list = new ArrayList<>();
if(size<1 || num.length<size){
return list;
}
//窗口长度固定
int left = 0;
int right = size-1;
while(right < num.length)
{
list.add(calcMax(num,left,right));
left++;
right++;
}
return list;
}
/**计算出当前数组[left,right]范围内最大的数字*/
public int calcMax(int[] num,int left,int right)
{
int max = num[left];
for(int i = left; i<=right; i++){
if(num[i] > max)
{
max = num[i];
}
}
return max;
}
}
最后
以上就是雪白水壶为你收集整理的刷题-剑指Offer-64. 滑动窗口的最大值(双指针)64. 滑动窗口的最大值的全部内容,希望文章能够帮你解决刷题-剑指Offer-64. 滑动窗口的最大值(双指针)64. 滑动窗口的最大值所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复