在数组c#列表中查找最大的子数组(降序)

问题描述 投票:-1回答:2

我需要找到最大的子阵列。例如:数组列表{ 1, 4, 7, 3, -3, -4, -1, 4, 2, 1 }需要找到数字正在减少的最大子数组。

从列表中可以看出,{ 7, 3, -3, -4 }是一个子阵列和{ 4, 2, 1 },因为前者最需要打印它。

c# arrays
2个回答
1
投票

只是

var results = new List<int>();

for (var i = 0; i < input.Length; i++)
{

   // how we check
   var current = new List<int>();

   // just to know if we are are going down
   var lastValue = input[i];

   // second loop make sure we stop if the numbers aren't going down
   for (var j = i; j < input.Length && input[j] <= lastValue; j++)
   {
      current.Add(input[j]);
      lastValue = input[j];
   }
   // Update the result depending on the criteria 
   if (current.Count >= results.Count)
   {
      results = current;
   }
}

// print your awesome numbers
foreach (var value in results)
{
   Console.Write($"{value}, ");
}

You can test it here


0
投票

您可以尝试这种LINQ方法:

var array = new[] { 1, 4, 7, 3, -3, -4, -1, 4, 2, 1 };

var descending_subarrays =
    array
        .Skip(1)
        .Aggregate(new [] { array.Take(1).ToList() }.ToList(), (a, x) =>
        {
            if (a.Last().Last() > x)
            {
                a.Last().Add(x);
            }
            else
            {
                a.Add(new [] { x }.ToList());
            }
            return a;
        })
        .OrderByDescending(x => x.Count)
        .ToList();

这给了:

result

然后,您可以使用descending_subarrays.First()选择查找答案。

© www.soinside.com 2019 - 2024. All rights reserved.