lc 632. Smallest Range

Posted waldenlake

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lc 632. Smallest Range相关的知识,希望对你有一定的参考价值。

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的主要内容,如果未能解决你的问题,请参考以下文章

[LeetCode] 632. Smallest Range Covering Elements from K Lists

codeforces 632C. The Smallest String Concatenation 排序

LC 302. Smallest Rectangle Enclosing Black Pixelslock, hard

LC 988. Smallest String Starting From Leaf

[LC] 373. Find K Pairs with Smallest Sums

[LC] 230. Kth Smallest Element in a BST