刚开始学习javascript。
输入可能就像。
1, 5, 2, 7
我的任务是弄清楚最低数字和最高数字之间缺少多少数字。
var sorted = statues.sort();
var ticker = 0;
var plusser = sorted[0] + 1;
var plusser1 = sorted[1] + 1;
var plusser2 = sorted[2] + 1;
var plusser3 = sorted[3] + 1;
if(sorted[1] != plusser) {
ticker++
}
if(sorted[2] != plusser1) {
ticker ++;
}
if(sorted[3] != plusser2) {
ticker ++;
}
if(sorted[4] != plusser3) {
ticker ++;
}
如果只有4个输入数量,那么效果很好,但情况并非总是如此,我相信如果使用某种循环,这可以编码更清晰。你能帮助我吗?
答案 0 :(得分:1)
找到最大值和最小值并循环遍历数组并检查数字是否不是数组的一部分。
var arr = [1, 5, 2, 7];
var numberMissing = 0;
for(var i = Math.min.apply(Math, arr) + 1 ; i < Math.max.apply(Math, arr); ++i){
if(arr.indexOf(i) === -1){
console.log(i);
++numberMissing;
}
}
console.log("Missing Number : " + numberMissing);
答案 1 :(得分:1)
如果数组包含唯一的数字(即 - 5不能出现两次),则可以使用简单的数学运算:
var statues = [1, 5, 2, 7];
var result =
Math.max.apply(Math, statues) - Math.min.apply(Math, statues) + 1 // the amount of items that should be in the array
-
statues.length; // the current amount of items
console.log(result);
如果您还想要数字,请创建现有数字的地图,然后创建一个数组,其中包含初始数组中不存在的所有数字:
var statues = [1, 5, 2, 7];
function getMissingNumbers(arr) {
var result = [];
var map = arr.reduce(function(map, n) { // create a map of existing numbers
map[n] = true;
return map
}, {});
var max = Math.max.apply(Math, arr); // find the max
var min = Math.min.apply(Math, arr); // find the min
for(var i = min; i < max; i++) { // run from min to max
map[i] || result.push(i); // add only numbers that don't exist in the map
}
return result;
}
var result = getMissingNumbers(statues);
console.log('Missing items: ', result);
console.log('Number of missing items: ', result.length);
答案 2 :(得分:1)
任务是弄清楚最低数字和最高数字之间缺少多少数字
由于问题是计算而不是列出所有缺失的数字,我们可以采用这种方法。以下是代码示例。
var input = [1,5,2,7];
var sortedInput = input.sort(); // this will work only for single digit array.
var firstNum = sortedInput[0],
lastNum = sortedInput[sortedInput.length-1],
numbersInRange = lastNum - firstNum +2; // +2 to include the numbers that are the range
var missingNumbers = numbersInRange - input.length;
console.log(missingNumbers)
&#13;
答案 3 :(得分:0)
以下是您可以尝试的简单解决方案:
var a = [1,5,2,7];
a.sort((a, b) => a-b)
.reduce((acc, element, index) => {
if(index) acc = acc + element - a[index-1] - 1; return acc;
}, 0);