我有一个价格清单,想找到不包含第一个元素的最低价格(这是HackerRank另一个问题的子集)。
我的版本太慢并且超时。我怀疑这是由于我的ArraySlice造成的。
这是我的(工作中的)代码:
94%
是否有一个性能更好的版本,也许是不使用ArraySlice的版本?
答案 0 :(得分:5)
只需使用dropFirst()
函数。
var array = [1,8,2,4,3]
var array2 = array.dropFirst() // Returns a subsequence containing all but the first element of the sequence.
array2.min() // 2
答案 1 :(得分:1)
为什么不保持简单
func calculateMins(prices: [Int]) {
var min = Int.max
for i in 1..<prices.count {
if prices[i] < min { min = prices[i] }
}
print(min)
}
答案 2 :(得分:1)
您几乎没有办法解决此问题。
//Default way
prices.dropFirst().min()
//Functional way
prices.dropFirst().reduce(Int.max, { min($0, $1) })
答案 3 :(得分:0)
您还可以使用suffix
,它与dropFirst
完全相同,如果数组为空,此版本可能会崩溃。
array.suffix(from: 1).min()