二分插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
全部评论

相关推荐

不愿透露姓名的神秘牛友
11-27 10:46
点赞 评论 收藏
分享
点赞 评论 收藏
分享
10-15 16:27
门头沟学院 C++
LeoMoon:建议问一下是不是你给他付钱😅😅
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务