码迷,mamicode.com
首页 > Windows程序 > 详细

239. Sliding Window Maximum

时间:2016-10-20 07:49:01      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:

Python暴力通关

 1 class Solution(object):
 2     def maxSlidingWindow(self, nums, k):
 3         """
 4         :type nums: List[int]
 5         :type k: int
 6         :rtype: List[int]
 7         """
 8         ret = []
 9         length = len(nums)
10         if 0 == length:
11             return []
12         w = length - k + 1
13         for i in range(w):
14             m = max(nums[i:i+k])
15             ret.append(m)
16         return ret

JavaScript双向队列 复杂度O(n)

 1 var maxSlidingWindow = function(nums, k) {
 2   //构造一个双向队列
 3   var window = [];
 4 
 5   var answer = [];
 6   for(var i = 0; i < nums.length; i++) {
 7 
 8     //删除窗口外的索引
 9     if(0 != window.length && window[0] == i - k)
10       window.shift();
11 
12     //每一次新加入的索引时,窗口中值比这个索引小的索引
13     //在接下来的窗口移动中永远不会在起作用
14     //也就是暗示,窗口内索引值是有序的
15 
16     //依次删除窗口内无效的索引
17     while(0 != window.length && nums[window[window.length - 1]] < nums[i])
18       window.pop();
19 
20     window.push(i);
21     if(i >= k-1)
22       answer.push(nums[window[0]]);
23   }
24   return answer;
25 };

 

239. Sliding Window Maximum

标签:

原文地址:http://www.cnblogs.com/muchrooms/p/5979370.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!