3 陣列和視窗

2021-09-05 01:24:57 字數 1581 閱讀 9307

description

給定乙個整型陣列

arr和乙個大小為

w的視窗,視窗從陣列最左邊滑動到最右邊,每次向右滑動乙個位置,求出每一次滑動時視窗內最大元素的和。

input

輸入的第一行為陣列,每乙個元素使用空格隔開;第二行為視窗大小。

output

輸出乙個值。

sample input 1 

4 3 5 4 3 3 6 7 3

sample output 1 32

from collections import deque

class solution:

"""@param: nums: a list of integers

@param: k: an integer

@return: the maximum number inside the window at each moving

"""def maxslidingwindow(self, nums, k):

sd = 0

# write your code here

#特殊情況,k=1,則每個都最大

if k == 1:

for g in range(len(nums)):

sd += int(nums[g])

return nums

#新建乙個雙端佇列qmax,初始值為0

#res存放每次移動的最大結果

qmax = deque()

res =

for x,y in enumerate(nums[1:],1):

"""x,y表示當前的下標和nums值;

判斷qmax隊尾儲存的下標j,

如果nums[j] > y,直接把下標x放進qmax隊尾中;

如果nums[j] <=y ,則一直從qmax的隊尾彈出直到某個下標在qmax中對應的值大於y,

此時把x放在qmax的隊尾中.

"""if nums[qmax[-1]] <=y:

for i in range(len(qmax)-1,-1,-1):

if nums[qmax[i]] > y:

break

else:

qmax.pop()

#當qmax存在過期資料,即不在移動k範圍內的,將其移除出雙端佇列

ns=int(k)

if qmax[0] <= x-ns:

qmax.popleft()

#將每次移動視窗的最大值儲存到res中

if x >=ns-1:

for g in range(len(res)):

sd+=int(res[g])

return sd

if __name__ == "__main__":

s = solution()

a=newvalue=input()

se=newvalue.replace(' ','')

a.extend(se)

num=input()

suma=s.maxslidingwindow(a,num)

print(suma)

演算法 陣列和視窗 陣列

給定乙個整型陣列arr和乙個大小為w的視窗,視窗從陣列最左邊滑動到最右邊,每次向右滑動乙個位置,求出每一次滑動時視窗內最大元素的和。輸入第一行為用例個數,每個測試用例輸入的第一行為陣列,每乙個元素使用空格隔開 第二行為視窗大小。輸出每個測試用例結果。14 3 5 4 3 3 6 7 3 陣列與視窗 ...

陣列 滑動視窗

滑動視窗大多用於處理連續子陣列問題,然後得到相應的長度。例題 長度最小的子陣列 給定乙個含有 n 個正整數的陣列和乙個正整數 s 找出該陣列中滿足其和 s 的長度最小的連續子陣列。如果不存在符合條件的連續子陣列,返回 0。思路 使用滑動視窗i在左邊,j在右邊,明確意義 i,j 為滑動視窗 閉區間 如...

陣列 滑動視窗

leetcode 209.長度最小的子陣列 給定乙個含有 n 個正整數的陣列和乙個正整數 s 找出該陣列中滿足其和 s 的長度最小的 連續 子陣列,並返回其長度。如果不存在符合條件的子陣列,返回 0。示例 輸入 s 7,nums 2,3,1,2,4,3 輸出 2 解釋 子陣列 4,3 是該條件下的長...