二分插window

class Solution:
    def maxInWindows(self, nums, size):
        # write code here
        def insert(s, left, right, val):
            if len(s) == 0: 
                s.append(val)
                return
            if val <= s[left]:
                s.insert(0, val)
                return
            elif val >= s[right]:
                s.append(val)
                return

            while left <= right:
                mid = (left+right)//2
                if s[mid] >= val:
                    right = mid-1
                else:
                    left = mid+1

            s.insert(left, val)


        ans = []
        n = len(nums)

        heap = []
        for i in range(n):
            insert(heap, 0, len(heap)-1, nums[i])
            if len(heap) == size:
                ans.append(heap[-1])
                heap.remove(nums[i-size+1])



        return ans
全部评论

相关推荐

05-21 15:47
门头沟学院 Java
浪漫主义的虹夏:项目有亮点吗,第一个不是纯玩具项目吗,项目亮点里类似ThreadLocal,Redis储存说难听点是花几十分钟绝大部分人都能学会,第二个轮子项目也没体现出设计和技术,想实习先沉淀,好高骛远的自嗨只会害了自己
点赞 评论 收藏
分享
06-15 18:44
黄淮学院 Java
Lynn012:如果是居民楼还是算了吧,看着有点野呢
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务