从数组中获取最小值

问题描述 投票:0回答:4

我陷入了从数组中获取最小值的困境。 每次我运行它时,最小值仍然为零。 我知道索引必须减一,但我只是不知道应该如何将它应用到代码上。

public class Class1 {
  int[] numbers = new int[99];

  public int Min() { // array gets de value thats on 0
    int Min = numbers[0];
    foreach(int number in numbers) { // if the number is smaller then 0.
      if (number < Min) { // zero is the new number
        Min = number;
      }

    }
    return Min;
  }
}
c# arrays
4个回答
25
投票

您可以轻松地与 Linq 一起使用,

Using System.Linq;

int min = numbers.Min();

5
投票

问题是您总是计算所有数字的最小值,其中包括您尚未使用按钮添加的所有数字的零。这就是为什么你的最小值现在总是返回 0,除非你添加 99 个数字。您需要将

Min
功能更改为:

public int Min() {
    int min = numbers[0];

    for (int i = 0; i < index; i++) {
        int number = numbers[i];

        if (number < min) {
            min = number;
        }
    }

    return min;
}

如您所见,该函数现在将仅使用您添加的数字(索引低于

index
)计算最小值,而不是 numbers 数组中的
所有
数字。


0
投票

这里的问题是你的命名约定,你有一个。 Min 变量和 Min 方法


0
投票

这是一个不可知的实现,显示了 Linq Min 在幕后对整数数组执行的操作。这也是针对 OP 请求最优化的算法。

注意事项:

时间复杂度:O(n) 辅助空间:O(1),因为没有使用额外的空间

   public  int Min(int[] numbers)
    {
        int min = numbers[0];
        
        foreach (int num in numbers)
        {
            // if the number (num) is smaller than current iteration (min) then it is the minimum.
            if (num < min)
            { 
                min = num;
            }
        }

        return min;
    }
© www.soinside.com 2019 - 2024. All rights reserved.