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