目前,我有一个已经分配了随机值的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;
}
但我想找到三个最大值并返回总和。我对如何找到它没有任何限制,但它是否会成为我写的最大方法的另一种方法?
答案 0 :(得分:5)
在C#中你有linq可以轻而易举地完成这个任务:
var sum = C.Cast<int>().OrderByDescending(i => i).Take(3).Sum();
就是这样,它将数组转换为一维可枚举,从最大到小的顺序排序,取前三个元素并对它们求和。
答案 1 :(得分:0)
一种替代的,可能更快,绝对不如基于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;
}