【问题标题】:Minimum value from range of Array数组范围内的最小值
【发布时间】:2019-01-29 09:42:58
【问题描述】:

我有一个价格列表,想找出不包括第一个元素的最低价格(这是 HackerRank 上另一个问题的子集)。

我的版本太慢而且超时。我怀疑这是由于我的 ArraySlice 造成的。

这是我的(工作)代码:

func calculateMins(prices: [Int]) {
    for j in 1..<prices.count  {
        let lowestPreviousPrice = prices[1...j].min()!
        print (lowestPreviousPrice)
    }
}

calculateMins(prices: [4,8,2,4,3])

有没有性能更好的版本,也许是不使用 ArraySlice 的版本?

【问题讨论】:

  • 为什么你不能使用Array.min()函数?
  • 需要成为数组的子集(我已经过度简化了问题)我将把这个例子改为排除第一个元素。
  • 输出会是什么?
  • 让我们把它当作数组的最小值,不包括第一个元素。已更新问题。

标签: swift


【解决方案1】:

只需使用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

【讨论】:

    【解决方案2】:

    为什么不保持简单

    func calculateMins(prices: [Int]) {
        var min = Int.max
        for i in 1..<prices.count {
            if prices[i] < min { min = prices[i] }
        }
        print(min)    
    }
    

    【讨论】:

      【解决方案3】:

      解决这个问题的选择很少。

      //Default way
      prices.dropFirst().min()
      
      //Functional way
      prices.dropFirst().reduce(Int.max, { min($0, $1) })
      

      【讨论】:

        【解决方案4】:

        您也可以使用suffix,这与dropFirst完全相同,如果数组为空,此版本可能会崩溃。

        array.suffix(from: 1).min()
        

        【讨论】:

          猜你喜欢
          • 2020-09-20
          • 2013-11-14
          • 2011-05-23
          • 2020-07-18
          • 1970-01-01
          • 2021-05-11
          • 2014-03-16
          • 2018-07-27
          • 2013-03-26
          相关资源
          最近更新 更多