【发布时间】:2019-06-20 13:17:11
【问题描述】:
首先,我检查了这类问题是否适合 Stackoverflow,并基于一个类似的问题 (javascript) 和来自这个问题:https://meta.stackexchange.com/questions/129598/which-computer-science-programming-stack-exchange-sites-do-i-post-on -- 确实如此。
就这样吧。在我看来,挑战非常简单:
给定五个正整数,找出最小和最大值 可以通过将五个整数中的四个恰好相加来计算。然后 将各自的最小值和最大值打印为单行 两个空格分隔的长整数。
例如,.我们的最小总和是 和我们的最大总和是 。我们会 打印
16 24
输入约束:
1 <= arr[i] <= (10^9)
我的解决方案非常简单。这是我最擅长的:
func miniMaxSum(arr: [Int]) -> Void {
let sorted = arr.sorted()
let reversed = Array(sorted.reversed())
var minSum = 0
var maxSum = 0
_ = sorted
.filter({ $0 != sorted.last!})
.map { minSum += $0 }
_ = reversed
.filter({ $0 != reversed.last!})
.map { maxSum += $0 }
print("\(minSum) \(maxSum)")
}
如您所见,我有两个排序数组。一个是递增的,一个是递减的。我正在删除两个新排序的数组的最后一个元素。我删除最后一个元素的方法是使用filter,这可能会产生问题。但从那里,我想我可以很容易地得到 4 个元素的最小和最大总和。
我通过了 13/14 个测试用例。我的问题是,这个解决方案可能会失败的测试用例是什么?
问题链接:https://www.hackerrank.com/challenges/mini-max-sum/problem
【问题讨论】:
-
你应该链接到 HackerRank 上的问题,这样人们可以更轻松地尝试它
-
是的,添加了它!
-
您是否遇到错误或超时?
-
@MartinR 哎呀,还没试过。对于 Timsort,我们应该将接受的答案视为 O(nLog(n))(最坏情况)还是 O(n)? O(n) 解决方案不应该排序,它考虑到 4 = 5 - 1
-
@ielyamani:问题是“为什么这段代码会在测试用例中失败?”而不是“这个编程挑战的最快解决方案是什么?” – 我故意没有提供完整的解决方案,因此 OP 不会因为解决该挑战而失去满足感 :)