📅  最后修改于: 2023-12-03 15:27:54.248000             🧑  作者: Mango
有一个 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)。