第一个笨办法版本会MLE,走到TC的44个(共74个)。所以还是得看Hint说的,不用遍历全部点。我把全部的起始点和结束点作为subarray中,并且对其排序。后,我只关心从那个点开始,因为此时,这个点开始之后需要+1个灯泡,到啥时候停下呢,到subarray的后一个元素+1这个位置-1,并记录这个-1的位置。将开始节点和结束节点作为key,+1 -1操作作为value放入dic中,后对这些点排序,顺着这些节点,累计灯泡的数量,则当灯泡数量最大的时候,记录其对应位置和数量。
class Solution:
def brightestPosition(self, lights: List[List[int]]) -> int:
briten = collections.defaultdict(int)
for center, rang in lights:
for i in range(center - rang, center + rang + 1):
briten[i] += 1
res = []
for pos, values in briten.items():
res.append((-values, pos))
res.sort(key = lambda x:(x[0],x[1]))
return res[0][1]
第二个版本
class Solution:
def brightestPosition(self, lights: List[List[int]]) -> int:
briten = collections.defaultdict(int)
for center, rang in lights:
briten[center - rang] += 1
briten[center + rang + 1] -= 1
lightaccu = 0
maxlight = float('-inf')
res = -1
for idx in sorted(briten.keys()):
lightaccu += briten[idx]
if lightaccu > maxlight:
res = idx
maxlight = lightaccu
return res