DedSec Project

22 sliding window — DedSec Project

from collections import deque def moving_max(numbers, size): if size <= 0: raise ValueError('positive size required') queue, result = deque(), for i, item in enumerate(numbers): while queue…

Αναφορά πηγαίου κώδικα

from collections import deque

def moving_max(numbers, size):
    if size <= 0:
        raise ValueError('positive size required')
    queue, result = deque(), []
    for i, item in enumerate(numbers):
        while queue and queue[0] <= i - size:
            queue.popleft()
        while queue and numbers[queue[-1]] <= item:
            queue.pop()
        queue.append(i)
        if i >= size - 1:
            result.append(numbers[queue[0]])
    return result

if __name__ == '__main__':
    assert moving_max([1,3,2,5,4],3) == [3,5,5]
    print(moving_max([4,1,6,2,3],2))