The hard point is to achieve O(n) time. Actually we can smell a sense of queue here. Python has a quite powerful deque data structure, and we can use that. Still using max() is too slow, we should link the whole process.
Solution:
# T:O(n) S:O(k) from collections import deque class Solution: # @param {integer[]} nums # @param {integer} k # @return {integer[]} def maxSlidingWindow(self, nums, k): q = deque() max_numbers = [] for i in xrange(k): while q and nums[i] >= nums[q[-1]]: q.pop() q.append(i) for i in xrange(k, len(nums)): max_numbers.append(nums[q[0]]) while q and nums[i] >= nums[q[-1]]: q.pop() while q and q[0] <= i - k: q.popleft() q.append(i) if q: max_numbers.append(nums[q[0]]) return max_numbersRun Time: 208 ms
No comments:
Post a Comment