从列数据中找出峰值间隔

时间:2014-05-23 07:56:31

标签: c# math

我有一些像这样的整数值:

2 4 6 4 2 4 8 4 2 3 7 4 2

我需要找到峰值 - 这是我的数组中值停止增加的点。在上面的示例中,有三个峰值 - 6, 8, 7

怎么做?感谢。

1 个答案:

答案 0 :(得分:5)

我不确切地知道你想要得到什么,但这是我所拥有的:

public List<Tuple<int, int>> GetPeaks(int[] values)
{
    List<Tuple<int, int>> results = new List<Tuple<int, int>>();

    List<int> curInterval = new List<int>();

    bool decreasing = false;
    for (int i = 0; i < values.Length; i++)
    {
        if (curInterval.Count > 0)
        {
            if (values[i] < curInterval.Last() && !decreasing)
            {
                results.Add(new Tuple<int, int>(i - 1, curInterval.Last()));
                curInterval.Clear();
                decreasing = true;
            }
            else if (values[i] >= curInterval.Last() && decreasing)
            {
                decreasing = false;
            }
        }
        curInterval.Add(values[i]);
    }
    return results;
}

似乎工作here(编辑后更新)。该方法将返回包含(peakPosition,peakValue)的元组。代码非常自我解释,我确信可以做得更好。