Skip to content

Commit efc0494

Browse files
committed
feat: add solutions to lc problem: No.0162. Find Peak Element
1 parent 90e3266 commit efc0494

File tree

10 files changed

+237
-18
lines changed

10 files changed

+237
-18
lines changed

solution/0100-0199/0162.Find Peak Element/README.md

Lines changed: 62 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,27 +44,87 @@
4444

4545
<p><strong>进阶:</strong>你可以实现时间复杂度为 <code>O(logN)</code><em> </em>的解决方案吗?</p>
4646

47-
4847
## 解法
4948

5049
<!-- 这里可写通用的实现逻辑 -->
5150

51+
二分查找。
52+
5253
<!-- tabs:start -->
5354

5455
### **Python3**
5556

5657
<!-- 这里可写当前语言的特殊实现逻辑 -->
5758

5859
```python
59-
60+
class Solution:
61+
def findPeakElement(self, nums: List[int]) -> int:
62+
left, right = 0, len(nums) - 1
63+
while left < right:
64+
mid = (left + right) >> 1
65+
if nums[mid] > nums[mid + 1]:
66+
right = mid
67+
else:
68+
left = mid + 1
69+
return left
6070
```
6171

6272
### **Java**
6373

6474
<!-- 这里可写当前语言的特殊实现逻辑 -->
6575

6676
```java
77+
class Solution {
78+
public int findPeakElement(int[] nums) {
79+
int left = 0, right = nums.length - 1;
80+
while (left < right) {
81+
int mid = (left + right) >> 1;
82+
if (nums[mid] > nums[mid + 1]) {
83+
right = mid;
84+
} else {
85+
left = mid + 1;
86+
}
87+
}
88+
return left;
89+
}
90+
}
91+
```
92+
93+
### **Go**
94+
95+
```go
96+
func findPeakElement(nums []int) int {
97+
left, right := 0, len(nums)-1
98+
for left < right {
99+
mid := (left + right) >> 1
100+
if nums[mid] > nums[mid+1] {
101+
right = mid
102+
} else {
103+
left = mid + 1
104+
}
105+
}
106+
return left
107+
}
108+
```
67109

110+
### **C++**
111+
112+
```cpp
113+
class Solution {
114+
public:
115+
int findPeakElement(vector<int>& nums) {
116+
int left = 0, right = nums.size() - 1;
117+
while (left < right) {
118+
int mid = left + right >> 1;
119+
if (nums[mid] > nums[mid + 1]) {
120+
right = mid;
121+
} else {
122+
left = mid + 1;
123+
}
124+
}
125+
return left;
126+
}
127+
};
68128
```
69129
70130
### **...**

solution/0100-0199/0162.Find Peak Element/README_EN.md

Lines changed: 62 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,18 +39,79 @@
3939

4040
## Solutions
4141

42+
Binary search.
43+
4244
<!-- tabs:start -->
4345

4446
### **Python3**
4547

4648
```python
47-
49+
class Solution:
50+
def findPeakElement(self, nums: List[int]) -> int:
51+
left, right = 0, len(nums) - 1
52+
while left < right:
53+
mid = (left + right) >> 1
54+
if nums[mid] > nums[mid + 1]:
55+
right = mid
56+
else:
57+
left = mid + 1
58+
return left
4859
```
4960

5061
### **Java**
5162

5263
```java
64+
class Solution {
65+
public int findPeakElement(int[] nums) {
66+
int left = 0, right = nums.length - 1;
67+
while (left < right) {
68+
int mid = (left + right) >> 1;
69+
if (nums[mid] > nums[mid + 1]) {
70+
right = mid;
71+
} else {
72+
left = mid + 1;
73+
}
74+
}
75+
return left;
76+
}
77+
}
78+
```
79+
80+
### **Go**
81+
82+
```go
83+
func findPeakElement(nums []int) int {
84+
left, right := 0, len(nums)-1
85+
for left < right {
86+
mid := (left + right) >> 1
87+
if nums[mid] > nums[mid+1] {
88+
right = mid
89+
} else {
90+
left = mid + 1
91+
}
92+
}
93+
return left
94+
}
95+
```
5396

97+
### **C++**
98+
99+
```cpp
100+
class Solution {
101+
public:
102+
int findPeakElement(vector<int>& nums) {
103+
int left = 0, right = nums.size() - 1;
104+
while (left < right) {
105+
int mid = left + right >> 1;
106+
if (nums[mid] > nums[mid + 1]) {
107+
right = mid;
108+
} else {
109+
left = mid + 1;
110+
}
111+
}
112+
return left;
113+
}
114+
};
54115
```
55116
56117
### **...**
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution {
2+
public:
3+
int findPeakElement(vector<int>& nums) {
4+
int left = 0, right = nums.size() - 1;
5+
while (left < right) {
6+
int mid = left + right >> 1;
7+
if (nums[mid] > nums[mid + 1]) {
8+
right = mid;
9+
} else {
10+
left = mid + 1;
11+
}
12+
}
13+
return left;
14+
}
15+
};
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
func findPeakElement(nums []int) int {
2+
left, right := 0, len(nums)-1
3+
for left < right {
4+
mid := (left + right) >> 1
5+
if nums[mid] > nums[mid+1] {
6+
right = mid
7+
} else {
8+
left = mid + 1
9+
}
10+
}
11+
return left
12+
}

solution/0100-0199/0162.Find Peak Element/Solution.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,12 @@ class Solution {
22
public int findPeakElement(int[] nums) {
33
int left = 0, right = nums.length - 1;
44
while (left < right) {
5-
int mid = (left + right) / 2;
6-
if(nums[mid] < nums[mid + 1]) left = mid + 1;
7-
else right = mid;
5+
int mid = (left + right) >> 1;
6+
if (nums[mid] > nums[mid + 1]) {
7+
right = mid;
8+
} else {
9+
left = mid + 1;
10+
}
811
}
912
return left;
1013
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class Solution:
2+
def findPeakElement(self, nums: List[int]) -> int:
3+
left, right = 0, len(nums) - 1
4+
while left < right:
5+
mid = (left + right) >> 1
6+
if nums[mid] > nums[mid + 1]:
7+
right = mid
8+
else:
9+
left = mid + 1
10+
return left

solution/0800-0899/0852.Peak Index in a Mountain Array/README.md

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@
7575

7676
<!-- 这里可写通用的实现逻辑 -->
7777

78-
二分查找
78+
二分查找
7979

8080
<!-- tabs:start -->
8181

@@ -143,10 +143,9 @@ func peakIndexInMountainArray(arr []int) int {
143143
class Solution {
144144
public:
145145
int peakIndexInMountainArray(vector<int>& arr) {
146-
int n = arr.size();
147-
int left = 1, right = n - 2;
146+
int left = 1, right = arr.size() - 2;
148147
while (left < right) {
149-
int mid = left + (right - left) / 2;
148+
int mid = left + right >> 1;
150149
if (arr[mid] < arr[mid + 1]) {
151150
left = mid + 1;
152151
} else {
@@ -158,6 +157,28 @@ public:
158157
};
159158
```
160159
160+
### **JavaScript**
161+
162+
```js
163+
/**
164+
* @param {number[]} arr
165+
* @return {number}
166+
*/
167+
var peakIndexInMountainArray = function(arr) {
168+
let left = 1;
169+
let right = arr.length - 2;
170+
while (left < right) {
171+
const mid = (left + right) >> 1;
172+
if (arr[mid] < arr[mid + 1]) {
173+
left = mid + 1;
174+
} else {
175+
right = mid;
176+
}
177+
}
178+
return left;
179+
};
180+
```
181+
161182
### **...**
162183

163184
```

solution/0800-0899/0852.Peak Index in a Mountain Array/README_EN.md

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949

5050
## Solutions
5151

52-
binary search
52+
Binary search.
5353

5454
<!-- tabs:start -->
5555

@@ -113,10 +113,9 @@ func peakIndexInMountainArray(arr []int) int {
113113
class Solution {
114114
public:
115115
int peakIndexInMountainArray(vector<int>& arr) {
116-
int n = arr.size();
117-
int left = 1, right = n - 2;
116+
int left = 1, right = arr.size() - 2;
118117
while (left < right) {
119-
int mid = left + (right - left) / 2;
118+
int mid = left + right >> 1;
120119
if (arr[mid] < arr[mid + 1]) {
121120
left = mid + 1;
122121
} else {
@@ -128,6 +127,28 @@ public:
128127
};
129128
```
130129
130+
### **JavaScript**
131+
132+
```js
133+
/**
134+
* @param {number[]} arr
135+
* @return {number}
136+
*/
137+
var peakIndexInMountainArray = function(arr) {
138+
let left = 1;
139+
let right = arr.length - 2;
140+
while (left < right) {
141+
const mid = (left + right) >> 1;
142+
if (arr[mid] < arr[mid + 1]) {
143+
left = mid + 1;
144+
} else {
145+
right = mid;
146+
}
147+
}
148+
return left;
149+
};
150+
```
151+
131152
### **...**
132153

133154
```
Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
class Solution {
22
public:
33
int peakIndexInMountainArray(vector<int>& arr) {
4-
int n = arr.size();
5-
int left = 1, right = n - 2;
4+
int left = 1, right = arr.size() - 2;
65
while (left < right) {
7-
int mid = left + (right - left) / 2;
6+
int mid = left + right >> 1;
87
if (arr[mid] < arr[mid + 1]) {
98
left = mid + 1;
109
} else {
@@ -13,4 +12,4 @@ class Solution {
1312
}
1413
return right;
1514
}
16-
};
15+
};
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/**
2+
* @param {number[]} arr
3+
* @return {number}
4+
*/
5+
var peakIndexInMountainArray = function(arr) {
6+
let left = 1;
7+
let right = arr.length - 2;
8+
while (left < right) {
9+
const mid = (left + right) >> 1;
10+
if (arr[mid] < arr[mid + 1]) {
11+
left = mid + 1;
12+
} else {
13+
right = mid;
14+
}
15+
}
16+
return left;
17+
};

0 commit comments

Comments
 (0)