可以看成一个感染过程,如果目标值为 k 的话,那么第一秒就是 nums 中所有值为 k 的地方向左右两边扩散一位
通过一个字典我们可以把 nums 中出现的每一个的值的下标以 list 的形式存储
处理每一个值的下标,对于值 k 来说,如果以 k 为目标,那么需要的最少秒数就是 nums 中所有 k 的最大间隔除以二
答案就是最小的第三步的处理结果
classSolution:defminimumSeconds(self, nums: List[int])->int:
d = defaultdict(list)
n =len(nums)for i inrange(n):
d[nums[i]].append(i)
ans = inf
for key in d.keys():
ma =0iflen(d[key])==1:
ma = n -1
d[key].append(d[key][0])for i inrange(len(d[key])-1):
ma =max(ma,(d[key][i +1]+ n - d[key][i]-1)% n)
ans =min(ans, ma)return ceil(ans /2)