Skip to content

Commit 79efcb4

Browse files
authored
up 寻找峰值元素
1 parent 98942a1 commit 79efcb4

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

algorithms/algo_notes/数组操作合集.md

+30
Original file line numberDiff line numberDiff line change
@@ -148,3 +148,33 @@ public:
148148
}
149149
};
150150
```
151+
152+
## https://leetcode-cn.com/problems/find-peak-element/ 寻找峰值元素
153+
思路
154+
155+
由于题目假设nums[-1]=nums[n]=-∞。所以,我们从0开始往后遍历元素,如果某个元素大于其后面的元素,则该元素就是峰值元素。(但是它时O(n),不符合题意)
156+
157+
O(logN)一般考虑二分搜索。有如下规律:
158+
159+
- 规律一:如果nums[i] > nums[i+1],则在i之前一定存在峰值元素
160+
161+
- 规律二:如果nums[i] < nums[i+1],则在i+1之后一定存在峰值元素
162+
163+
```c++
164+
class Solution {
165+
public:
166+
int findPeakElement(vector<int>& nums) {
167+
int left = 0, right = nums.size() - 1;
168+
//二分的第一种写法 左闭右闭的区间,也就是[left, right]
169+
while(left < right) {
170+
int mid = left + ((right - left) / 2);// 防止溢出
171+
if (nums[mid] > nums[mid + 1]) {
172+
right = mid;
173+
} else {
174+
left = mid + 1;
175+
}
176+
}
177+
return left;
178+
}
179+
};
180+
```

0 commit comments

Comments
 (0)