Advertisement
vit134

Пропущенное число в массиве (сумма Гаусса)

Oct 26th, 2018
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.     Найти пропущенное число в массиве
  3. */
  4.  
  5. // Число, возвращаемое функцией - 8
  6. var array = [2, 5, 1, 4, 9, 6, 3, 7];
  7.  
  8. // вариант не рабоатает на массиве [12,24,36,60] и похожих, только [1 - 12]
  9. function missingNumber(arr) {
  10.     let max = Math.max.apply(Math, intArray);
  11.     let min = Math.min.apply(Math, intArray);
  12.     // Проходим через массив и находим сумму чисел
  13.     let sum = arr.reduce((acc, val) => acc += val);
  14.  
  15.     /* Находим теоретическую сумму последовательных чисел, используя вариацию суммы Гаусса*/
  16.     // Формула: [(N * (N + 1)) / 2] - [(M * (M - 1)) / 2];
  17.     // N - верхняя граница, а M - нижняя граница
  18.  
  19.     upperLimitSum = (max * (max + 1)) / 2;
  20.     lowerLimitSum = (min * (min - 1)) / 2;
  21.  
  22.     let theoreticalSum = upperLimitSum - lowerLimitSum;
  23.  
  24.     return theoreticalSum - sum;
  25. }
  26. //var intArray = [15,10,12,14,13]; // Missing 2,6
  27. //var intArray = [9,1,5,8,7,4,3,0,10,13,15,19,12,16,18];  // Missing 2,6,11,14,17
  28.  
  29. // находит все потерянные числа на любом массиве, но находит все числа с разницей 1
  30. function missingNumber(arr) {
  31.     var max = Math.max.apply(Math, intArray);
  32.     var min = Math.min.apply(Math, intArray);
  33.     var missing = []
  34.  
  35.     for ( var i = min; i < max; i++ ) {
  36.         if ( intArray.indexOf(i) < 0 ) {
  37.             missing.push( i );
  38.         }
  39.     }
  40.  
  41.     return missing
  42. }
  43.  
  44. console.log(missingNumber(array))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement