我有一些像这样的整数值:
2 4 6 4 2 4 8 4 2 3 7 4 2
我需要找到峰值 - 这是我的数组中值停止增加的点。在上面的示例中,有三个峰值 - 6, 8, 7
怎么做?感谢。
答案 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)的元组。代码非常自我解释,我确信可以做得更好。