2016-11-25 98 views

回答

3

如果未对数组进行排序,对其进行排序,然后在相邻元素中寻找多于1的增加值。

1

您可以提取最小值和最大值,并将数组与最小值和最大值的范围进行比较。

红宝石例如:

array = [1,2,3,4,6,8,9] 
min, max = array.minmax 
missing = (min..max).to_a - array 
#=> [5,7] 

或排序和寻找差距是大于1

array = [1,2,3,4,6,8,9,12] 
array.sort.each_cons(2) do |a,b| 
    if (b-1) > a then 
    (a+1..b-1).each do |i| 
     puts "#{i} is missing" 
    end 
    end 
end 

# 5 is missing 
# 7 is missing 
# 10 is missing 
# 11 is missing 
+0

我真的很喜欢获取最大和最小的ID。你可以减去它们并检查数组的长度以找出错过的数目。 – Seb

+0

你需要检查数组没有重复,只包含整数。否则'3,3,5'和'3,3.1,5'将会匹配 –

0

在Javascript中(原则应结转),你可以对它进行排序数字,然后你的工作通过阵列寻找不在那里的数字。当你找到它们时,你可以记下它并继续前进。

看一看这里:

var numberArray = [1, 2, 3, 4, 6, 8, 9, 15, 12]; 
 
var missingArray = []; 
 

 
function findMissing() { 
 
    var sortedArray = numberArray.sort(function(a, b) { 
 
    return a - b 
 
    }); 
 
    var currentNo = sortedArray[0]; 
 

 
    for (let i = 0; i < sortedArray.length; i++) { 
 
    if (sortedArray[i] == currentNo) { 
 
     currentNo++ 
 
    } else { 
 
     missingArray.push(currentNo); 
 
     i--; 
 
     currentNo++; 
 
    } 
 
    } 
 
    document.querySelector(".problem").innerHTML = "Array numbers are " + numberArray; 
 
    document.querySelector(".result").innerHTML = "Missing numbers are " + missingArray; 
 
} 
 

 
findMissing();
<div class="problem"></div> 
 
<div class="result"></div>

希望这有助于。