在锯齿状数组 C# 中查找每个数组的总和

Finding the sum of each array in a jagged array C#

我希望接收一个类型为 int[][] 的锯齿状数组,然后 运行 通过数组找到总和最高的特定数组,然后 return 该总和。我在网上做了一些挖掘,但没有找到太多关于如何单独总结每个数组的信息。

例如,如果这是接收到的输入:

int[][] accounts = new int[3][];
            accounts[0] = new int[] { 1, 2, 3};
            accounts[1] = new int[] { 2, 3, 4 };
            accounts[2] = new int[] { 3, 4, 5 };

我最接近的是获取所有元素的总和

for (var i = 0; i < accounts.Length; i++)
{
    for (var j = 0; j < accounts[i].Length; j++)
        {
            sum += accounts[i][j];
        }
}

我缺少什么步骤来分离数组并单独求和?

你的问题是你没有保持最大值。

给定

var accounts = new int[][]
{
   new[] {1, 2, 3},
   new[] {2, 3, 4},
   new[] {3, 4, 5}
};

例子

var max = 0;
for (var i = 0; i < accounts.Length; i++)
{
   var sum = 0;
   for (var j = 0; j < accounts[i].Length; j++)
      sum += accounts[i][j];
   if (sum > max) 
      max = sum;
}

但是,让我们看看如何使它更简洁。

你可以使用 foreach

foreach (var array in accounts)
{
   var sum = 0;
   foreach (var item in array)
      sum += item;
   if (sum > max) 
      max = sum;
}

你可以使用 Linq Sum

foreach (var array in accounts)
{
   var sum = array.Sum();
   if (sum > max) 
      max = sum;
}

或者您可以使用 Linq MaxSum

var max = accounts.Max(x => x.Sum());

其他资源

Enumerable.Max Method

Returns the maximum value in a sequence of values.

Enumerable.Sum Method

Computes the sum of a sequence of numeric values.

对您当前的尝试实施的一个简单修复方法是跟踪目前看到的 maxAccountSum

using System;

class MainClass
{
    public static void Main (string[] args)
    {
        int[][] accounts = new int[3][];
        accounts[0] = new int[] { 1, 2, 3 };
        accounts[1] = new int[] { 2, 3, 4 };
        accounts[2] = new int[] { 3, 4, 5 };     
        
        var maxAccountSum = Int32.MinValue; // To account for if the accounts have negative balances? Like they were all overdrafted or something.
        for (var i = 0; i < accounts.Length; i++)
        {
            var accountSum = 0;
            for (var j = 0; j < accounts[i].Length; j++)
            {
                accountSum += accounts[i][j];
            }
            maxAccountSum = Math.Max (maxAccountSum, accountSum);
        }

        Console.WriteLine ("The highest sum in an account is {0}.", maxAccountSum);
    }
}

时间-Space分析:

  • O(mn)时间,其中m为账户数,n为单个账户最大值数。
  • O(1) space,因为我们只跟踪几个额外的变量。

输出:

The highest sum in an account is 12.