【问题标题】:How to find the lowest number in an array? [duplicate]如何找到数组中的最小数字? [复制]
【发布时间】:2017-03-25 05:39:18
【问题描述】:

我正在编写一个算法来查找数组中的最小数字,但是我的打印语句一直说最小数字是 0。我有以下内容:

var list = [5, 4, 3, 5, 2, 50, 8, 10, 300]

func findMin(numbers: NSArray) {

    var minValue = numbers[0]
    var isSmallest: Bool

    for i in 0...numbers.count {
        isSmallest = true
        for j in 0...numbers.count {
            if i > j {
                isSmallest = false
            }
        }

        if isSmallest {
            minValue = i
        }

    }
    print("Smallest value in the list is \(minValue)")
}

findMin(numbers: list as NSArray)

我的打印语句返回为:

"Smallest value in the list is 0\n"

我觉得算法是正确的。有什么想法吗?

编辑:回答了我自己的问题

我正在迭代索引而不是实际值。感谢 cmets 中的一位用户。正确的代码应该是:

var list = [5, 4, 3, 5, 2, 50, 8, 10, 300]

func findMin(numbers: NSArray) {

    var minValue = numbers[0]
    var isSmallest: Bool

    for i in list {
        isSmallest = true
        for j in list {
            if i > j {
                isSmallest = false
            }
         }

        if isSmallest {
            minValue = i
        }

    }

    print("Smallest value in the list is \(minValue)")
}

findMin(numbers: list as NSArray)

【问题讨论】:

  • 你想用哪种语言来做这个?
  • 它能给你正确的答案吗?
  • @ArjunBhoot 斯威夫特
  • 您正在比较索引而不是数组值。

标签: arrays swift


【解决方案1】:

简单

let list = [5, 4, 3, 5, 2, 50, 8, 10, 300]
let minValue = list.min()

【讨论】:

  • 什么 id 我的列表是一个键值对
  • @RajathKornaya。这取决于你要完成什么。例如,您可以获得最少数量的值list.values.min()
【解决方案2】:

对于逻辑使用试试这个

    var list = [5, 4, 3, 5, 2, 50, 8, 10, 300]
    var minValue = list[0]
    for num in list {
        minValue = (num  < minValue) ? num : minValue
    }
    print("Smallest value in the list is \(minValue)")

对于通过属性直接获取最小值

let list = [5, 4, 3, 5, 2, 50, 8, 10, 300]
let minValue = list.min()

【讨论】:

  • minValue = min(num, minValue) 可能会被讲师接受 :) 您还应该处理一个空列表 :)
【解决方案3】:

或者你可以使用

var list = [5, 4, 3, 5, 2, 50, 8, 10, 300]
list.min() // returns 2

【讨论】:

    【解决方案4】:

    如果您想在没有额外循环的情况下找到最小值,请尝试以下操作:

    var list = [5, 4, 3, 5, 2, 50, 8, 10, 300]
    
    func findMin(numbers: NSArray) {
    
        var minValIdx = 0
        var minValue = numbers[0] as! Int
    
        for i in 1..<numbers.count {
            if (numbers[i] as! Int) < minValue {
                minValue = numbers[i] as! Int
                minValIdx = i
            }
        }
    
        print("Smallest value in the list is \(minValue)")
    }
    
    findMin(numbers: list as NSArray)
    

    【讨论】:

      【解决方案5】:

      您可以在 Swift 中将此代码用于手动算法:

      let list = [5, 4, 3, 5, 2, 50, 8, 10, 300]
          var smallest = list[0]
          for item in list {
              if (item < smallest) {
                  smallest = item
              }
          }
          print("smallest number is: \(smallest)")
      

      如果你想让 Swift 完成艰苦的工作,那么就使用这个:

      let smallest = list.min()
      print("smallest number is: \(smallest)")
      

      【讨论】:

        【解决方案6】:

        这就是你的解决方案

        let numbers = [1, 6, 3, 9, 4, 6]
        
        let min = minElement(numbers) // 1
        
        let position = find(array, min)// it will return index  
        

        【讨论】:

        • minElement(array) 已替换为 array.min()
        【解决方案7】:

        假设您必须实际展示一些逻辑,只是抛出更多选项:

        func min<T:Comparable>(_ elements:[T]) -> T? {
            guard let first = elements[0] else {
                return nil
            }
            return elements.reduce(first, min)
        }
        
        print(min(list))
        

        或者把它放在一个扩展中,这本质上就是Array.min的定义

        extension Array where Element : Comparable {
            func smallest() -> Element? {
                guard let first = self.first else {
                    return nil
                }
        
                // Use 'Swift.min' to get to the global function since Array
                // already has a min function
                return reduce(first, Swift.min)
            }
        }
        
        print(list.smallest())
        

        【讨论】:

          【解决方案8】:

          您可以使用以下代码: 它在 C# 中

           var list = [5, 4, 3, 5, 2, 50, 8, 10, 300]
                      int minVal = list[0];
          
                  for (int i = 1; i < list.Length; i++)
                  {
                      if (list[i] < minVal)
                      {
                          minVal = intArray[i];
                      }
                  }
          

          【讨论】:

            【解决方案9】:

            为了找到序列中的最小元素,Swift 3 有一个名为 min() 的 istance 方法:

            var list = [5, 4, 3, 5, 2, 50, 8, 10, 300]
            let minElem = list.min()
            

            如果序列有没有元素,则返回nil

            这个方法也可以用于浮点数列表:

            let heights = [67.5, 65.7, 64.3, 61.1, 58.5, 60.3, 64.9]
            let minHeight = heights.min()
            

            可以找到官方文档参考here

            【讨论】:

              猜你喜欢
              • 2012-09-26
              • 2021-06-14
              • 2011-10-31
              • 2012-10-11
              • 2017-05-30
              • 1970-01-01
              • 2014-09-13
              • 2018-08-27
              • 2017-02-02
              相关资源
              最近更新 更多