📅  最后修改于: 2023-12-03 14:54:58.843000             🧑  作者: Mango
本题有两套解法,分别介绍如下。
遍历数组中的所有元素,将数组中每个元素及其下标都加入一个字典中。若当前元素在字典中出现过,则说明找到了一对相等的元素,将对应的下标对计入答案。
def count_same_index_pairs(nums):
cnt = 0
num_index = {}
for i in range(len(nums)):
if nums[i] in num_index:
cnt += len(num_index[nums[i]])
num_index[nums[i]].append(i)
else:
num_index[nums[i]] = [i]
return cnt
时间复杂度:$O(n)$,其中 $n$ 为数组的长度。
空间复杂度:$O(n)$,用于存储字典。
先将数组排序,然后从头遍历数组,对于当前的元素 $nums[i]$,在已经遍历过的元素中查找是否有和 $nums[i]$ 相等的元素,若有则将下标对计入答案。
def count_same_index_pairs(nums):
cnt = 0
nums_sorted = sorted(enumerate(nums), key=lambda x: x[1])
for i in range(len(nums_sorted)):
for j in range(i + 1, len(nums_sorted)):
if nums_sorted[i][1] != nums_sorted[j][1]:
break
if nums_sorted[i][0] > nums_sorted[j][0]:
cnt += 1
return cnt
时间复杂度:$O(n\log n)$,其中 $n$ 为数组的长度,主要花费在排序上。
空间复杂度:$O(n)$,用于存储新数组。