C# 在二维数组中查找 3 个最大值

本文关键字:最大值 查找 二维数组 | 更新日期: 2023-09-27 18:33:27

目前,我有一个已经分配了随机值的 2D 数组。我知道如何用这样的东西找到最大值:

public static int Largest( int[,] C)
{
    int largest = 0;
    for (int row = 0; row < C.GetLength(0); row++)
    {
        for (int col = 0; col < C.GetLength(1); col++)
        {
            if( largest < C[ row, col])
            {
                largest = C[ row, col];
            }
        }
    }
    return largest;
}

但是我想找到三个最大值并返回总和。我不一定对如何找到它有任何限制,但它会是另一种类似于我写的最大方法的方法吗?

C# 在二维数组中查找 3 个最大值

在 C# 中,你有 linq,它可以轻而易举地做到这一点:

var sum = C.Cast<int>().OrderByDescending(i => i).Take(3).Sum();

仅此而已,它将数组转换为一维可枚举数组,从大到小排序,取前三个元素并将它们求和。

一种替代的、可能更快、但绝对不如基于 LINQ 的解决方案的灵活性:

public static int LargestSum(int[,] array)
{
    int firstLargest = 0, secondLargest = 0, thirdLargest = 0;
    for(int x = 0; x < array.GetLength(0); x++)
    {
        for(int y = 0; y < array.GetLength(1); y++)
        {
            int value = array[x, y];
            if(value > thirdLargest)
            {
                if (value > secondLargest)
                {
                    if (value > firstLargest)
                    {
                        thirdLargest = secondLargest;
                        secondLargest = firstLargest;
                        firstLargest = value;
                    }
                    else
                    {
                        thirdLargest = secondLargest;
                        secondLargest = value;
                    }
                }
                else
                {
                    thirdLargest = value;
                }
            }
        }
    }
    return firstLargest + secondLargest + thirdLargest;
}