2016-11-25 85 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>

希望這有助於。