Skip to content

Commit 238f863

Browse files
committed
162.寻找峰值,二分查找
1 parent 4a983fd commit 238f863

File tree

3 files changed

+62
-0
lines changed

3 files changed

+62
-0
lines changed

leetcode_Java/DoneTitle.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@
8686
152. 乘积最大子数组
8787
155. 最小栈
8888
160. 相交链表
89+
162. 寻找峰值
8990
165. 比较版本号
9091
169. 多数元素
9192
188. 买卖股票的最佳时机 IV

leetcode_Java/DoneType.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,7 @@
170170
88. 合并两个有序数组(排序,双指针)
171171
128. 最长连续序列(集合,排序)
172172
136. 只出现一次的数字(哈希表,列表,位运算)
173+
162. 寻找峰值(二分查找)
173174
169. 多数元素(排序,哈希表,投票,计数,分治)
174175
215. 数组中的第K个最大元素(快速排序,堆排序)
175176
238. 除自身以外数组的乘积(前缀和)

leetcode_Java/Solution0162.java

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
// 162. 寻找峰值
2+
3+
4+
/*
5+
二分查找:
6+
1、二分查找的合理性
7+
1)对于任意数组而言,一定存在峰值,因为 nums[0] = nums[n] = -∞
8+
2)二分不会错过峰值,因为每次分段查找选择更高的一部分,最终的找到的位置其左右相邻值一定比它低
9+
2、计算中点位置时,(left+right)/2 取整计算,中点位置可能在左边界,一定不可能在右边界,中点位置右边的元素一定存在,所以比较元素时要跟右边元素比较
10+
3、mid 和 mid+1 位置的元素比较,谁大就以谁为新边界。左元素大就继续到左半部分找、右元素大就到右半部分找。
11+
12+
1 2 3 1
13+
↑ ↑ ↑
14+
l mid r
15+
============
16+
1 2 3 1
17+
↑ ↑
18+
l/mid r
19+
============
20+
1 2 3 1
21+
22+
l/r
23+
*/
24+
class Solution {
25+
public int findPeakElement(int[] nums) {
26+
int left = 0, right = nums.length - 1;
27+
while (left < right) {
28+
int mid = (left + right) / 2;
29+
if (nums[mid] > nums[mid + 1]) {
30+
right = mid;
31+
} else {
32+
left = mid + 1;
33+
}
34+
}
35+
return left;
36+
}
37+
}
38+
39+
40+
/*
41+
一次遍历,判断当前位置是否高于左右两边
42+
*/
43+
class Solution {
44+
public int findPeakElement(int[] nums) {
45+
int n = nums.length;
46+
for (int i = 0; i < n; i++) {
47+
boolean flag = true;
48+
if (i - 1 >= 0 && nums[i - 1] > nums[i]) {
49+
flag = false;
50+
}
51+
if (i + 1 < n && nums[i] < nums[i + 1]) {
52+
flag = false;
53+
}
54+
if (flag) {
55+
return i;
56+
}
57+
}
58+
return -1;
59+
}
60+
}

0 commit comments

Comments
 (0)