📌  相关文章
📜  要删除的最短子数组以使所有 Array 元素唯一(1)

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

要删除的最短子数组以使所有 Array 元素唯一

有一个 Array 包含一些元素,需要找到最短的子数组,删除该子数组后,使得 Array 中的元素都唯一。

解决方案

使用一个哈希表来记录每个元素出现的次数,然后遍历 Array,如果发现某个元素出现次数大于 1,则记录其位置,并更新最小长度。

最后,返回最小长度即可。

代码实现如下:

function findShortestUniqueSubarray(arr) {
  let minLen = Infinity;
  const map = {};
  let start = 0;
 
  for (let i = 0; i < arr.length; i++) {
    if (map[arr[i]] === undefined) {
      map[arr[i]] = 1;
    } else {
      map[arr[i]]++;
      while (map[arr[i]] > 1) {
        map[arr[start]]--;
        start++;
      }
    }
    if (Object.keys(map).length === i - start + 1 && i - start + 1 < minLen) {
      minLen = i - start + 1;
    }
  }
 
  return minLen === Infinity ? 0 : minLen;
}
示例
const arr = [1, 2, 2, 3, 1];
console.log(findShortestUniqueSubarray(arr)); // Output: 2

上面的代码将输出 2,因为可以删除子数组 [2, 2],得到 Array [1, 2, 3],所有元素都唯一。

总结

以上就是"要删除的最短子数组以使所有 Array 元素唯一"的解决方案。这个问题可以通过哈希表实现,时间复杂度为 O(n)。