📅  最后修改于: 2023-12-03 14:56:19.318000             🧑  作者: Mango
在编写Javascript程序时,我们可能需要在一个数组中查找丢失的元素。这个数组可能存在重复项,因此需要编写一个特殊的程序来查找丢失的元素。
下面是一个用于从重复数组中查找丢失元素的Javascript程序。
function findMissingElements(arr) {
// 1. 将数组排序,排除重复项。
arr = arr.sort((a, b) => {
return a - b;
});
let newArr = [];
// 排除重复项
for (let i = 0; i < arr.length - 1; i++) {
if (arr[i] !== arr[i + 1]) {
newArr.push(arr[i]);
}
}
newArr.push(arr[arr.length - 1]);
// 2. 确定数组中的最小值和最大值。
let minNum = newArr[0];
let maxNum = newArr[newArr.length - 1];
// 3. 根据最小值和最大值, 创建一个新数组。
let resArr = new Array(maxNum - minNum + 1);
// 4. 在新数组中查找应该存在的元素,如果元素不存在,则认为是丢失的元素。
for (let i = 0; i < resArr.length; i++) {
resArr[i] = 0;
}
for (let i = 0; i < newArr.length; i++) {
resArr[newArr[i] - minNum] = 1;
}
let res = [];
for (let i = 0; i < resArr.length; i++) {
if (resArr[i] === 0) {
res.push(i + minNum);
}
}
return res;
}
该程序的实现使用了以下步骤:
newArr
。newArr
中的最小值和最大值,分别为minNum
和maxNum
。minNum
和maxNum
创建一个长度为maxNum - minNum + 1
的新数组resArr
。newArr
数组,在resArr
对应位置上将元素置为1。如果resArr
对应位置上为0,则说明该元素是丢失的元素。let arr = [3,5,2,5,2];
let res = findMissingElements(arr);
console.log(res); // [4]
上述示例中,传入的数组为[3, 5, 2, 5, 2]
,其中重复的元素有2
和5
。程序会先排除重复元素,得到新数组[2, 3, 5]
,最小值为2,最大值为5。根据最小值和最大值创建一个长度为4的新数组[0,0,0,0]
。遍历newArr
数组,在resArr
对应位置上将元素置为1,得到[1,1,0,1]
。最后返回在resArr
中为0的元素对应的值,即结果为[4]
。