滑动窗口最大值
题目描述:
解题思路:
- 第一种:暴力法。这个思路就很好理解,从头开始遍历,用切片取每次的
k
个元素作为滑动窗口然后把最大值直接append
给最后需要返回的最大值集合max_number
。非常暴力所以速度比较慢。 - 时间复杂度:O(N)
class Solution:
def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
lens = len(nums)
max_number = []
if not nums:
return []
for i in range(lens - k + 1):
max_number.append(max(nums[i:i + k]))
return max_number
- 第二种:双向队列。
class Solution:
def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
if not nums or len(nums) < k or k <= 0:
return []
if k == 1:
return nums
max_numbers = []
temp = [0]
for i in range(len(nums)):
if i - temp[0] > k - 1:
temp.pop(0)
while temp and nums[i] >= nums[temp[-1]]:
temp.pop()
if len(temp) < k - 1:
temp.append(i)
if i >= k - 1:
max_numbers.append(nums[temp[0]])
return max_numbers