数组中缺少数字

时间:2018-09-29 03:59:50

标签: javascript arrays

当我开始通过排序从数组中搜索元素时遇到了一个问题:

function missingnumber(numbers) {
  var missing = -1;
  var sorted = numbers.sort(function(a, b) {
    a - b
  })
  
  for (var i = sorted[0]; i < numbers.length - 1; i++) {
    if (numbers(i) === -1) {
      missing = i
    }
  }
  return missing;
}

var numbers = [2,4,10,7,6,11,8,9,12]//5 without sorting
var numbers = [11,19,18,17,15]//i am getting -1 with sorting

console.log(missing - number(numbers))

我正在尝试通过排序来获取缺失的数字,它给我缺失的数字-1。我的逻辑哪里出洞了?

2 个答案:

答案 0 :(得分:1)

您的代码中存在许多语法和逻辑错误;这里有一些:

  • if (numbers(i) === -1) {的语法错误(您可能将numbers[i]作为数组索引)和逻辑错误(将数组索引与-1进行比较不会告诉您是否除非缺失数字恰好是-1,否则它是否是缺失数字。

  • console.log(missing - number(numbers))是您(正确地,至少在代码中的某处)试图通过减法计算缺失数的位置。不幸的是,这在语法或逻辑上都不正确。

  • var i = sorted[0]应该只是var i = 0,而不是0中索引sorted处元素的值。

这是工作版本;如果遗漏了多个数字,则返回第一个数字,并假设步长在以下序列中始终为1

const missing = nums => {
  nums.sort((a, b) => a - b);
  
  for (var i = 1; i < nums.length; i++) {
    if (nums[i] - nums[i-1] !== 1) {
      return nums[i-1] + 1;
    }
  }
  
  return -1;
};

console.log(missing([2,4,10,7,6,11,8,9,12]));
console.log(missing([11,19,18,17,15]));

答案 1 :(得分:0)

阵列解决方案中的Codility缺失数100%性能

func missingNumber( array: [Int]) -> Int {

    let length = array.count+1
    let totalSum = length * (length+1)/2

    let actualSum = array.reduce(0, { x, y in
        x + y
    })

    return totalSum - actualSum
}

另一种解决方案是

public func solution(_ array : inout [Int]) -> Int {
    // write your code in Swift 4.2.1 (Linux)
     var dict: [Int:  Int] = [:]

    array.map{

        dict[$0] = $0
    }

    var missingNumber = 1

    for (_, _) in dict {

        if dict[missingNumber] == nil {

            return missingNumber
        }
        missingNumber = missingNumber+1
    }

    return missingNumber
}