lc 632. Smallest Range
阿新 • • 發佈:2018-09-13
.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