我陷入了从数组中获取最小值的困境。 每次我运行它时,最小值仍然为零。 我知道索引必须减一,但我只是不知道应该如何将它应用到代码上。
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;
}
}
您可以轻松地与 Linq 一起使用,
Using System.Linq;
int min = numbers.Min();
问题是您总是计算所有数字的最小值,其中包括您尚未使用按钮添加的所有数字的零。这就是为什么你的最小值现在总是返回 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
数组中的 所有数字。
这里的问题是你的命名约定,你有一个。 Min 变量和 Min 方法
这是一个不可知的实现,显示了 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;
}