本文主要是介绍【剑指offr--C/C++】JZ59 滑动窗口的最大值,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、题目
二、思路及代码
暴力解法是依次往后滑动一位,然后比较窗口内的值。
我这里考虑:窗口每次往后移动一位,那么如果当前窗口的最大值max在窗口内部,那么再滑动到下一个窗口的时候,窗口内只有最新进来的一个元素没有跟max做过比较,只需要让他俩比较一下即可。通过这种方式能比暴力比较节省一点时间。
class Solution {public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param num int整型vector* @param size int整型* @return int整型vector*/vector<int> maxInWindows(vector<int>& num, int size) {// write code hereint i = 0;int p = -1; //当前窗口中最大值所在的下标int max = -10003;vector<int> ans;if(size==0) return ans;for (i = 0; i < num.size() - size+1; i++) {int n=i+size-1;//如果窗口往后滑动一位,p还在窗口内,那么只需要再跟新进窗口的那个值比较一下就可以了if (p >= i && p < n) {if (max < num[n]) {max = num[n];p = n;}} else {max=num[i];for (int j = i+1; j < i+size; j++) {if (num[j] > max) {max = num[j];p = j;}}}ans.push_back(max);}return ans;}
};
这篇关于【剑指offr--C/C++】JZ59 滑动窗口的最大值的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!