日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

滑动窗口最大值-leetcode 239题

發布時間:2023/12/4 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 滑动窗口最大值-leetcode 239题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

給你一個整數數組 nums,有一個大小為 k 的滑動窗口從數組的最左側移動到數組的最右側。你只可以看到在滑動窗口內的 k 個數字。滑動窗口每次只向右移動一位。

返回滑動窗口中的最大值。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/sliding-window-maximum
解法一:暴力法:
解題思路:

  • 移動窗口計算每一個窗口的最大值
  • 將步驟1得到的值加入要返回的列表中
  • class Solution:def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:# 暴力法時間復雜度O(Nk) 直接超出時間限制res = []if k<1 or k>len(nums):return res left = 0right = k - 1while right<len(nums):maxval = self.maxvalue(left,right,nums)res.append(maxval)left += 1right += 1return resdef maxvalue(self,left,right,nums):maxval = nums[left]while left<=right:if maxval<nums[left]:maxval = nums[left]return maxval

    解法二:單調隊列法
    解題思路:

  • 如果隊列最左側索引已不在滑動窗口范圍內,彈出隊列最左側索引
  • 通過循環確保隊列的最左側索引所對應元素值最大
  • 新元素入隊
  • 從第一個滑動窗口的末尾索引開始將最大值存儲到結果res中
  • class Solution:def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:# 邊界條件if k * len(nums) == 0:return []# 優化if k == 1:return numsfrom collections import dequeq = deque()# 單調隊列法:def clean_q()這個函數是精髓def clean_q(i):while q and q[0] <= i-k:q.popleft()while q and nums[q[-1]] < nums[i]:q.pop()q.append(i)res = []for i in range(k):clean_q(i)res.append(nums[q[0]])for i in range(k,len(nums)):clean_q(i)res.append(nums[q[0]])return res

    總結

    以上是生活随笔為你收集整理的滑动窗口最大值-leetcode 239题的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。