📌  相关文章
📜  获得至少两个相等的Array元素所需的索引值的最小增量(1)

📅  最后修改于: 2023-12-03 15:11:53.738000             🧑  作者: Mango

获得至少两个相等的Array元素所需的索引值的最小增量

当我们处理数组时,经常需要找到数组中重复出现的元素。在某些情况下,我们希望查找第一次出现相同元素的索引差,即获得至少两个相等的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数据结构来存储已经访问过的元素,因此不仅保证了时间复杂度,也避免了冗余操作。