1. 程式人生 > >lc 632. Smallest Range

lc 632. Smallest Range

.so spa 記錄 self. self tran none com 最小

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