We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
1 parent 98942a1 commit 79efcb4Copy full SHA for 79efcb4
algorithms/algo_notes/数组操作合集.md
@@ -148,3 +148,33 @@ public:
148
}
149
};
150
```
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