使用数组查找最高数字产品

时间:2018-01-08 15:30:34

标签: arrays swift function numbers

我正在编写一个函数,它将返回数组中两个数字的最高乘积,到目前为止,我的函数可以返回只有正数或只有负数的数组中的最大数。我如何编写我的函数,它将知道两个负数可能比两个最高数字I.E.更大的产品。 -20 * -20大于2 * 3.我尝试写一个if语句来查看是否修复了它但它没有。有人可以指导我如何冷修复我的代码来容纳这个?

func adjacentElementsProduct(inputArray: [Int]) -> Int {
var array2 = inputArray.sorted(by: { $0 > $1})
var array3 = inputArray.sorted(by: { $0 < $1})

// Lowest
let firstLow = array3[0]    
let secondLow = array3[1]

// Highest
let firstMax = array2[0]
let secondMax = array2[1]

// Trying to fix the problem
if firstLow * secondLow > firstMax * secondMax {
    return firstLow * secondLow 
} else {
    return firstMax * secondMax
}

}

2 个答案:

答案 0 :(得分:0)

枚举所有元素并将它们相乘会更有效,更容易

var result = Int.min
for i in (0..<array.count) {
    for j in (i+1..<array.count) {
         result = max(max, array[i] * array[j])
    }
}

答案 1 :(得分:0)

这实际上是一个非常棘手的场景,取决于您希望对结果的严格程度,因为所有边缘情况。您可以拥有以下方案:

  • 只有1个正数
  • 只有1个负数
  • 只有1个负数和1个正数
  • 1个正面,1个负面和0
  • 没有数字

这是我的简单解决方案,应涵盖所有内容。

func adjacentElementsProduct(inputArray: [Int]) -> Int {
    let sorted = inputArray.sorted()
    let count = sorted.count
    if count > 1 {
        return max(sorted[0] * sorted[1], sorted[count - 1] * sorted[count - 2])
    } else {
        return sorted.first ?? 0
    }
}