当我开始通过排序从数组中搜索元素时遇到了一个问题:
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。我的逻辑哪里出洞了?
答案 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
}