我一直在做一些 CodeSignal 项目,最近遇到了一个问题,它给你一个随机的数字数组,并要求你返回使数组连续所需的数字数量。
例如,如果给定一个数组 [3, 6, 8],您将需要 '4'、'5' 和 '7' 来使数组连续。所以输出应该是'3'。
我找到了一个有效的答案:
return Math.max.apply(Math, arr) - Math.min.apply(Math, arr) -
arr.length + 1;
问题是我不确定为什么会这样。是否有一个数学概念可以解释为什么从最大值中减去数组的最小值和长度可以得出正确答案?
- 所有数字都是整数
- 未排序
最佳答案
假设数组只有整数并且数字已经排序,那么你可以这样做:
const arr = [1, 4, 6, 9];
let count = 0;
for(let i = arr[0]; i < arr[arr.length-1]; ++i) {
if(!arr.includes(i)) {
count++;
}
}
// 5
console.log(count);
工作示例:http://jsbin.com/xuvikotoju/edit?html,js,console,output
是的,如果你有一个排序数组,你可以像你所做的那样应用一个公式,正如评论中提到的那样:
(max - min) - (array.length + 1)
你会得到相同的答案。
具有 O(1) 性能
关于javascript - 给定一组随机值,计算缺少哪些值以及其中有多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51777150/