C++ 程序计算数组中局部极值的数量

2025 年 1 月 12 日 | 2 分钟阅读

假设我们有一个 n 元素的数组 A。局部最小值是数组 A[i] 中严格小于其两个邻居的元素。如果它严格大于其邻居,它也将是局部最大值。因为 A[0]A[n-1] 只有一个邻居,所以它们不是最大值或最小值。必须确定给定数组中局部极值的数量。

因此,如果 A = [1, 5, 2, 5],输出将是 2,因为 A[1] 处的 5 是局部最大值,A[2] 处的 2 是局部最小值。

方法:要计算极值的数量,我们必须首先确定一个元素是最大值还是最小值,即它是否大于或小于其两个邻居。遍历数组,检查每个元素成为极值的可能性。

值得注意的是,a[0] 和 a[n-1] 各只有一个邻居,既不是最小值也不是最大值。

示例

文件名:Extreme.cpp

输出

2

复杂度分析

时间复杂度:O(n),其中 n 是输入数组的长度。这是因为 for 循环从 1 执行到 n。

空间复杂度:O(1),因为没有使用额外的空间。