2

我有一个数字数组,我想在其中找到第一个连续升序数字系列(计数超过一个)。

示例输入:{5, 1, 2, 4, 8, 7, 6, 9}
所需输出: {1, 2, 4, 8}

4

2 回答 2

3

这应该从给定的起始索引中找到第一个升序:

public static IEnumerable<int> GetAscending(IEnumerable<int> input, int startIndex)
{
    var ascending = input.Skip(startIndex)
        .Zip(input.Skip(startIndex + 1), (first, second) => new { Num = first, Next = second, Diff = second - first })
        .SkipWhile(p => p.Diff <= 0)
        .TakeWhile(p => p.Diff > 0)
        .Select(p => Tuple.Create(p.Num, p.Next))
        .ToArray();

    if(ascending.Length == 0) return Enumerable.Empty<int>();

    return ascending.Select(t => t.Item1).Concat(new int[] { ascending.Last().Item2 });
}
于 2012-08-07T19:05:33.797 回答
0
public IEnumerable<int> getAscendingValues(IEnumerable<int> source)
{
    List<int> output = new List<int>();

    foreach (int next in source)
    {
        if (output.Count == 0 || output.Last() < next)
        {
            output.Add(next);
        }
        else
        {
            if (output.Count <= 1)
            {
                output.Clear();
            }
            else
            {
                return output;
            }
        }
    }

    if (output.Count > 1)
    {
        return output;
    }
    else
    {
        return null; //could also return an empty enumeration
    }
}

如果您想从特定索引开始,您可以Skip在调用它之前使用该方法,而不是添加额外的参数来支持它。(即getAscendingValues(values.Skip(startIndex))

于 2012-08-07T19:04:37.010 回答