-1

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

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。我的逻辑漏洞在哪里?

4

2 回答 2

1

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

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

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

  • var i = sorted[0]应该是简单var i = 0的而不是索引0in处元素的值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]));

于 2018-09-29T04:18:33.003 回答
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
}
于 2020-04-08T07:31:45.713 回答