码迷,mamicode.com
首页 > 其他好文 > 详细

lc 632. Smallest Range

时间:2018-09-13 14:25:14      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:sel   tco   rip   problem   type   poi   imp   ble   turn   

https://leetcode.com/problems/smallest-range/description/

 

给你k个数组,找一个最小区间[a,b],可以包含k个数组中的数字各至少一个。

 

滑动窗口题。

对于要求“最短”的题目很适用。

 

points:

1.在扩张右界的时候,一旦碰到合法就停止,但不用记录结果。在收缩左界的时候进行记录(判断)。

 

code:

import heapq
class Solution:
    def __init__(self):
        self.a=None
        self.b=None
    def smallestRange(self, nums):
        """
        :type nums: List[List[int]]
        :rtype: List[int]
        """

        def newAns(a,b):
            if self.a==None or b-a<self.b-self.a:
                self.a=a
                self.b=b

        k=len(nums)
        cnt=[0]*k
        n=0

        tem=[]
        for i in range(len(nums)):
            arr=nums[i]
            tem+=[(arr[j],i) for j in range(len(arr))]
        nums=tem
        nums.sort()

        i=0
        j=-1


        while j<len(nums):
            while j<len(nums) and n<k:
                j += 1
                if j==len(nums):
                    break
                cnt[nums[j][1]] += 1
                if cnt[nums[j][1]] == 1:
                    n += 1
            while i<len(nums) and n==k:
                newAns(nums[i][0], nums[j][0])
                cnt[nums[i][1]] -= 1
                if cnt[nums[i][1]] == 0:
                    n -= 1
                i += 1
                if i == len(nums):
                    break

        return [self.a,self.b]

 

lc 632. Smallest Range

标签:sel   tco   rip   problem   type   poi   imp   ble   turn   

原文地址:https://www.cnblogs.com/waldenlake/p/9639673.html

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