力扣162寻找峰值c语言解题思路
时间: 2024-10-20 19:02:08 浏览: 35
力扣162题(寻找峰值 II)是一个经典的二分查找算法题目,它的要求是在给定数组中找到峰值元素,峰值是指其前一个数小于当前数,后一个数也小于当前数的元素。这里可以采用递归或迭代的方式解决。
解题思路如下:
1. **基本情况**:数组只有一个元素时,它是唯一的峰值,直接返回即可。
2. **二分查找**:对于长度大于1的数组,我们首先将数组分为两半。如果数组的第一个元素大于第二个元素,则第一个元素就是左半部分的最大值,所以我们需要在右半部分继续查找峰值;反之,如果第一个元素小于第二个元素,我们就需要在右半部分查找峰值。
3. **递归调用**:通过上述判断,我们可以分别对左右两部分递归地调用此过程,直到找到峰值或者遍历到单个元素为止。
```c
int findPeakElement(int nums[], int left, int right) {
if (left > right) // 如果只剩下一个元素,那就是峰值
return left;
int mid = left + (right - left) / 2; // 计算中间位置
if (nums[mid] > nums[mid - 1] && nums[mid] > nums[mid + 1]) // 如果中间元素是峰值
return mid;
else if (nums[mid] < nums[mid + 1]) // 否则,在右半部分找峰值
return findPeakElement(nums, mid + 1, right);
else // 否则,在左半部分找峰值
return findPeakElement(nums, left, mid - 1);
}
```
阅读全文