我正在尝试解决任务,从数组中获取大量缺少的元素。例如,如果给定数组[1,3,6],则丢失元素的数量为3(2,4,5)。但是某处代码出错,系统不接受该代码。 我尝试了一些方法,但不幸的是它们没用。
function arr(x){
let y = [];
for (let i = x[0]; i <= x[x.length-1]; i++){
y.push(i);
}
return y.length-x.length;
}
let m = arr([1,2,3,4,5,6]);
console.log(m);
或者...
function arr(x){
let y = [];
for (let i = 0; i < x.length; i++){
for (let j = 0; j < i; j++){
if (x[i] == x[j]){
x.splice(i,1);
i--;
}
}
}
console.log(x);
for (let i = x[0]; i <= x[x.length-1]; i++){
y.push(i);
}
console.log(y);
return y.length-x.length;
}
let l = arr([1,3,2,4,9]);
console.log(l);
我也尝试对数组进行排序,但是没有变化
答案 0 :(得分:3)
说实话,您实际上不需要for循环。我认为您可以通过检查数组的最大数量,最小数量和长度来计算nr。
这对您也有用吗?
TargetObject
答案 1 :(得分:2)
您可以按照以下步骤进行操作:
注意:我正在考虑对数组进行排序。
function missed(arr){
arr = [...new Set(arr)];
return arr[arr.length - 1] - arr[0] - arr.length + 1
}
console.log(missed([1,3,6]))
如果需要在未排序的数组上使用它。然后使用Math.max()
和Math.min()
。
function missed(arr){
arr = [...new Set(arr)];
let max = Math.max(...arr);
let min = Math.min(...arr);
return max - min - arr.length + 1
}
console.log(missed([1,3,6]))
console.log(missed([6,1,3]))
答案 2 :(得分:0)
我不知道优化是否是必须的,我认为最简单的非ES6(对所有浏览器都支持)无效的方法是对数组进行排序并遍历数组,记录您期望但缺少的数字。像这样:
var arr = [4,1,6,8];
arr.sort();
var miss = [];
var expect = arr[0]; // The starting number is the first element in the array I guess. Change to 1 if you want it to be 1
// Loop through the sorted array
for (var i = 0; i < arr.length; i++) {
while(arr[i] > expect++) { // keep looping while the current number is not the one expected, and increment the expected by one
miss.push(expect-1); // If missed, record the missed number (which is the actual expected minus 1, as we already incremented it)
}
}
console.log(miss);
答案 3 :(得分:0)
您可以尝试:
function arr(x){
let y = [];
let start = Math.min(...x);
let end = Math.max(...x);
for (let i = start; i <= end; i++){
y.push(i);
}
return y.length-x.length;
}
let m = arr([1,3,6]);
console.log(m);