再用这个编写一个c++程序
时间: 2024-10-10 07:11:55 浏览: 29
当然可以,这里是将上面的伪代码转化为实际的C++代码实现:
```cpp
#include <iostream>
#include <vector>
int findPeak(std::vector<int>& nums, int n) {
// 初始峰顶候选为第一个元素
int peak = nums[0];
// 检查特殊情况
if (n == 1) {
return peak;
}
// 定义左右边界
int left = 0;
int right = n - 1;
// 当左边界小于等于右边界时
while (left <= right) {
// 计算中间索引
int mid = (left + right) / 2;
// 比较中间值与两侧,更新峰顶
if (mid > 0 && nums[mid] < nums[mid - 1]) {
peak = nums[mid];
} else if (nums[mid] > nums[mid + 1]) {
peak = nums[mid];
} else {
// 如果中间值不大于左边也不小于右边,移动到中间的左侧或右侧
if (nums[mid] >= nums[left]) {
right = mid - 1; // 右移
} else {
left = mid + 1; // 左移
}
}
}
return peak;
}
int main() {
std::vector<int> nums = {1, 3, 2, 5, 4};
int n = nums.size();
int peak = findPeak(nums, n);
std::cout << "峰顶是: " << peak << std::endl;
return 0;
}
```
这个程序首先包含了必要的头文件,然后定义了一个名为 `findPeak` 的函数,用于在已排序的单峰数组中查找峰顶。`main` 函数中创建了一个示例数组并调用了这个函数,最后打印出找到的峰顶值。请注意,此代码假定输入数组已经是升序排列,因为题目中没有明确说明是否需要先对数组排序。如果数组未排序,你可能需要先进行排序操作,这将增加额外的时间复杂度。
阅读全文