Leetcode 239 滑動視窗最大值

2021-10-04 23:39:23 字數 1158 閱讀 7092

暴力解

真的暴力,不過也揭示了這個題的本質,你需要在o(1)的時間裡找到視窗內的最大值。因為遍歷陣列需要o(n)

class

solution;if

(nums.

size()

==0)return res;

int mm=int_min;

for(

int i=

0;isize()

-k+1

;i++

)return res;}}

;

單調遞減的雙向佇列

**與這個題解相同,僅為個人重寫後的記錄。

在視窗移動的過程中,乙個數字加入,乙個數字離開,保證隨時訪問最大值。

對於加入的數字nums[i],如果他比以前的數字大,那麼自從遇見它開始,以前的數字沒有存在的必要,因為它們會在nums[i]之前會離開,因此可以直接將這些元素推出佇列,整個佇列滿足降序大小排列,滿足對應的nums座標(進入的先後)公升序

對於將要離開的數字nums[i-k],存在兩種可能,一、它已經被後續的更大元素擠出佇列,二、它是最大元素,如果它是最大元素,需要在佇列中刪除它。

#define debug(x) cout<<#xdescqueue

data.

push_back

(n);

}void

pop(

int n)

}int

max()}

;class

solution;if

(nums.

size()

==0)return res;

descqueue dq;

for(

int i=

0;isize()

;i++

)else

}return res;}}

;

動態規劃

LeetCode 239 滑動視窗最大值

class solution public int maxslidingwindow int nums,int k int numlen nums.length if nums null numlenmaxheap new priorityqueue a,b nums b nums a for in...

LeetCode 239 滑動視窗最大值

給定乙個陣列 nums,有乙個大小為 k 的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗 k 內的數字。滑動視窗每次只向右移動一位。返回滑動視窗最大值。示例 輸入 nums 1,3,1,3,5,3,6,7 和 k 3 輸出 3,3,5,5,6,7 解釋 滑動視窗的位置 最大值 1...

leetcode239滑動視窗最大值

給定乙個陣列 nums,有乙個大小為 k 的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗 k 內的數字。滑動視窗每次只向右移動一位。返回滑動視窗最大值。示例 輸入 nums 1,3,1,3,5,3,6,7 和 k 3 輸出 3,3,5,5,6,7 解釋 滑動視窗的位置 最大值 1...