我正在编写一个函数,它将返回数组中两个数字的最高乘积,到目前为止,我的函数可以返回只有正数或只有负数的数组中的最大数。我如何编写我的函数,它将知道两个负数可能比两个最高数字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
}
}
答案 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)
这实际上是一个非常棘手的场景,取决于您希望对结果的严格程度,因为所有边缘情况。您可以拥有以下方案:
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
}
}