我有多个 int 数组:
1) [1 , 202,4 ,55]
2) [40, 7]
3) [2 , 48 ,5]
4) [40, 8 ,90]
我需要得到所有位置上数字最大的数组。在我的例子中,这将是数组#4。说明:
- 数组 #2、#4 的第一个位置的数字最大,因此在第一次迭代后将返回这两个数组([40, 7] 和 [40, 8 ,90])
- 现在在比较上一次迭代返回的数组的第二个位置后,我们将得到数组 #4,因为 8 > 7
- 等等...
您能为此推荐一个有效的算法吗?最好使用 Linq。
更新
长度没有限制,只要任意位置的某个数更大,那么这个数组就是最大的。
最佳答案
LINQ 效率不高(例如参见 LINQ vs FOREACH vs FOR )。但是,它具有很好的可读性。如果您确实需要比 LINQ 提供的更好的性能,则应该在不使用 LINQ 的情况下编写代码。但是,您不应该在知道需要优化之前就进行优化。
这不是专门针对性能进行调整,而是针对您的问题的清晰、可读的解决方案:
static int[] FindLargestArray(int[][] arrays)
{
for (int i = 0; arrays.Length > 1 && i < arrays.Max(x => x.Length); i++)
{
var maxVal = arrays.Where(x => i < x.Length).Max(x => x[i]);
arrays = arrays.Where(x => i < x.Length && x[i] == maxVal).ToArray();
}
return arrays[0]; //if more than one array, they're the same, so just return the first one regardless
}
根据具体情况,这个性能可能已经足够好了。
关于c# - 如何返回 C# 中最大元素的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13109301/