我需要找到最大的子阵列。例如:数组列表{ 1, 4, 7, 3, -3, -4, -1, 4, 2, 1 }
需要找到数字正在减少的最大子数组。
从列表中可以看出,{ 7, 3, -3, -4 }
是一个子阵列和{ 4, 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}, ");
}
您可以尝试这种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();
这给了:
然后,您可以使用descending_subarrays.First()
选择查找答案。