1. 解题思路
这一题思路上我们只需要首先将所有的元素进行聚合,然后分别考察同一个元素的所有位置上其前后相邻的相同元素所处的位置,然后返回间隔最小值即可。
然后,对于每一个query,我们只需要直接返回其对应的值即可。
2. 代码实现
给出python代码实现如下:
class Solution:
def solveQueries(self, nums: List[int], queries: List[int]) -> List[int]:
n = len(nums)
locs = defaultdict(list)
for i, x in enumerate(nums):
locs[x].append(i)
ans = [-1 for _ in nums]
for key, vals in locs.items():
m = len(vals)
if m == 1:
continue
vals = [vals[-1] - n] + vals + [vals[0] + n]
for i in range(1, m+1):
ans[vals[i]] = min(vals[i]-vals[i-1], vals[i+1]-vals[i])
return [ans[i] for i in queries]
提交代码评测得到:耗时261ms,占用内存54.3MB。