239 Sliding Window Maximum 滑动窗口最大值
給定一個數組 nums,有一個大小為 k 的滑動窗口從數組的最左側移動到數組的最右側。你只可以看到在滑動窗口 k 內的數字。滑動窗口每次只向右移動一位。
例如,
給定 nums = [1,3,-1,-3,5,3,6,7],和 k = 3 。
窗口位置??????????????????????? 最大值
---------------????????? ? ? ? ??? -----
[1? 3? -1] -3? 5? 3? 6? 7?????? 3
?1 [3? -1? -3] 5? 3? 6? 7?????? 3
?1? 3 [-1? -3? 5] 3? 6? 7?????? 5
?1? 3? -1 [-3? 5? 3] 6? 7?????? 5
?1? 3? -1? -3 [5? 3? 6] 7?????? 6
?1? 3? -1? -3? 5 [3? 6? 7]????? 7
由此可見,返回最大的滑動窗口為:[3,3,5,5,6,7]。
注意:
你可以假設 k 一直都是有效的,例如:1 ≤ k ≤ 輸入數組的大小,輸入數組不為空。
進階:
你能在線性時間復雜度內解決此題嗎?
詳見:https://leetcode.com/problems/sliding-window-maximum/description/
Java實現:
class Solution {public int[] maxSlidingWindow(int[] nums, int k) {int n=nums.length;if(n==0||nums==null){return new int[0];}int[] res=new int[n-k+1];for(int i=0;i<n-k+1;++i){int maxVal=nums[i];for(int j=i;j<i+k;++j){if(nums[j]>maxVal){maxVal=nums[j];}}res[i]=maxVal;}return res;} }?C++實現:
class Solution { public:vector<int> maxSlidingWindow(vector<int>& nums, int k) {int n=nums.size();vector<int> res;if(n==0||nums.empty()){return res;}for(int i=0;i<n-k+1;++i){int maxVal=nums[i];for(int j=i;j<i+k;++j){if(nums[j]>maxVal){maxVal=nums[j];}}res.push_back(maxVal);}return res;} };?
轉載于:https://www.cnblogs.com/xidian2014/p/8760034.html
總結
以上是生活随笔為你收集整理的239 Sliding Window Maximum 滑动窗口最大值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oversized尺寸怎么选?
- 下一篇: 273 Integer to Engli