C++分治力扣162.寻找峰值
时间: 2024-12-19 16:12:32 浏览: 13
在LeetCode的162题中,题目名为"寻找峰值元素"(Find Peak Element)。这是一个二分查找问题,目标是在给定的数组`nums`中找到第一个峰值元素,即数组中的最大值(或者是最小值,取决于数组的特性),这个峰值元素满足左面的所有元素都小于它,右面的所有元素也都小于它。
C++中解决这个问题的基本思路是:
1. 首先,检查数组长度是否大于1,因为单个元素也可以视为峰值。
2. 然后,定义两个指针,`left`指向数组起始位置,`right`指向数组结束位置。
3. 通过循环,每次取中间元素`mid`,并比较左右两侧的元素。如果`nums[mid]`大于它的左侧元素(即`nums[mid] > nums[left]`),那么峰值可能在右半部分,所以将`left = mid + 1`;反之,如果小于右侧元素,则峰值可能在左半部分,更新`right = mid - 1`。
4. 当`left`和`right`相遇(或者相等),表示找到了峰值,返回`mid`作为结果。
5. 如果数组只有一个元素,或者`left >= right`,说明整个数组都是峰值(对于最小峰值而言),返回数组的第一个或最后一个元素。
下面是简单的C++代码实现:
```cpp
int findPeakElement(vector<int>& nums) {
if (nums.empty()) return 0;
int left = 0, right = nums.size() - 1;
while (left < right) {
int mid = left + (right - left) / 2;
if (nums[mid] > nums[mid + 1]) {
right = mid;
} else {
left = mid + 1;
}
}
return left;
}
```
阅读全文