📅  最后修改于: 2023-12-03 15:11:53.738000             🧑  作者: Mango
当我们处理数组时,经常需要找到数组中重复出现的元素。在某些情况下,我们希望查找第一次出现相同元素的索引差,即获得至少两个相等的Array元素所需的索引值的最小增量。
下面是一个简单的实现示例,它首先使用Set数据结构来查找重复元素,然后使用Array.prototype.indexOf()方法来查找第一个重复元素的索引,最后使用Array.prototype.lastIndexOf()方法来查找最后一个重复元素的索引。最小增量即为这两者之差。
function findMinIndexIncrement(arr) {
let minIncrement = Infinity;
const seen = new Set();
for (let i = 0; i < arr.length; i++) {
if (seen.has(arr[i])) {
const firstIndex = arr.indexOf(arr[i]);
const lastIndex = arr.lastIndexOf(arr[i]);
minIncrement = Math.min(minIncrement, lastIndex - firstIndex);
} else {
seen.add(arr[i]);
}
}
return minIncrement === Infinity ? -1 : minIncrement;
}
使用示例:
const arr = [1, 2, 3, 4, 5, 2, 3, 4];
const minIndexIncrement = findMinIndexIncrement(arr); // 2
这个函数的时间复杂度为O(n),因为它只遍历了一次数组。它还使用了Set数据结构来存储已经访问过的元素,因此不仅保证了时间复杂度,也避免了冗余操作。