如何在Visual C#中获得数组中第二高的数字?

neu*_*cer 3 c# arrays algorithm

我有一系列的整数.我想获得该数组中第二高的数字.是否有捷径可寻?

RCI*_*CIX 16

试试这个(使用LINQ):

int secondHighest = (from number in numbers
                     orderby number descending
                     select number).Skip(1).First();
Run Code Online (Sandbox Code Playgroud)

  • LINQ没有局部排序吗?是的,优化应该集中在瓶颈上.但是如果您有算法选择,并且每个算法的代码都很复杂,那么您没有义务选择较慢的算法以避免"过早优化";-) (3认同)

Gen*_*man 15

您可以对数组进行排序并在第二个索引处选择项目,但是下面的O(n)循环会快得多.

int[] myArray = new int[] { 0, 1, 2, 3, 13, 8, 5 };
int largest = int.MinValue;
int second = int.MinValue;
foreach (int i in myArray)
{
    if (i > largest)
    {
        second = largest;
        largest = i;
    }
    else if (i > second)
        second = i;
}

System.Console.WriteLine(second);
Run Code Online (Sandbox Code Playgroud)

  • 你也可以初始化最大和第二个int.MinValue并且不做任何假设;) (3认同)