Skip to content

Commit b9c1b7b

Browse files
committedOct 2, 2021
feat: add solutions to lcof2 problem: No.069. Peek Index in a Mountain Array
1 parent bd3de43 commit b9c1b7b

File tree

13 files changed

+250
-118
lines changed

13 files changed

+250
-118
lines changed
 

‎lcof2/剑指 Offer II 069. 山峰数组的顶部/README.md

+82-1
Original file line numberDiff line numberDiff line change
@@ -78,22 +78,103 @@
7878

7979
<!-- 这里可写通用的实现逻辑 -->
8080

81+
二分查找。
82+
8183
<!-- tabs:start -->
8284

8385
### **Python3**
8486

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

8789
```python
88-
90+
class Solution:
91+
def peakIndexInMountainArray(self, arr: List[int]) -> int:
92+
left, right = 1, len(arr) - 2
93+
while left < right:
94+
mid = (left + right) >> 1
95+
if arr[mid] > arr[mid + 1]:
96+
right = mid
97+
else:
98+
left = mid + 1
99+
return left
89100
```
90101

91102
### **Java**
92103

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

95106
```java
107+
class Solution {
108+
public int peakIndexInMountainArray(int[] arr) {
109+
int left = 1, right = arr.length - 2;
110+
while (left < right) {
111+
int mid = (left + right) >> 1;
112+
if (arr[mid] > arr[mid + 1]) {
113+
right = mid;
114+
} else {
115+
left = mid + 1;
116+
}
117+
}
118+
return left;
119+
}
120+
}
121+
```
122+
123+
### **C++**
124+
125+
```cpp
126+
class Solution {
127+
public:
128+
int peakIndexInMountainArray(vector<int>& arr) {
129+
int left = 1, right = arr.size() - 2;
130+
while (left < right)
131+
{
132+
int mid = (left + right) >> 1;
133+
if (arr[mid] > arr[mid + 1]) right = mid;
134+
else left = mid + 1;
135+
}
136+
return left;
137+
}
138+
};
139+
```
140+
141+
### **Go**
142+
143+
```go
144+
func peakIndexInMountainArray(arr []int) int {
145+
left, right := 1, len(arr)-2
146+
for left < right {
147+
mid := (left + right) >> 1
148+
if arr[mid] > arr[mid+1] {
149+
right = mid
150+
} else {
151+
left = mid + 1
152+
}
153+
}
154+
return left
155+
}
156+
```
96157

158+
### **JavaScript**
159+
160+
```js
161+
/**
162+
* @param {number[]} arr
163+
* @return {number}
164+
*/
165+
var peakIndexInMountainArray = function(arr) {
166+
let left = 1;
167+
let right = arr.length - 2;
168+
while (left < right) {
169+
const mid = (left + right) >> 1;
170+
if (arr[mid] < arr[mid + 1]) {
171+
left = mid + 1;
172+
} else {
173+
right = mid;
174+
}
175+
}
176+
return left;
177+
};
97178
```
98179

99180
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution {
2+
public:
3+
int peakIndexInMountainArray(vector<int>& arr) {
4+
int left = 1, right = arr.size() - 2;
5+
while (left < right)
6+
{
7+
int mid = (left + right) >> 1;
8+
if (arr[mid] > arr[mid + 1]) right = mid;
9+
else left = mid + 1;
10+
}
11+
return left;
12+
}
13+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
func peakIndexInMountainArray(arr []int) int {
2+
left, right := 1, len(arr)-2
3+
for left < right {
4+
mid := (left + right) >> 1
5+
if arr[mid] > arr[mid+1] {
6+
right = mid
7+
} else {
8+
left = mid + 1
9+
}
10+
}
11+
return left
12+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class Solution {
2+
public int peakIndexInMountainArray(int[] arr) {
3+
int left = 1, right = arr.length - 2;
4+
while (left < right) {
5+
int mid = (left + right) >> 1;
6+
if (arr[mid] > arr[mid + 1]) {
7+
right = mid;
8+
} else {
9+
left = mid + 1;
10+
}
11+
}
12+
return left;
13+
}
14+
}
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+
right = mid;
12+
} else {
13+
left = mid + 1;
14+
}
15+
}
16+
return left;
17+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class Solution:
2+
def peakIndexInMountainArray(self, arr: List[int]) -> int:
3+
left, right = 1, len(arr) - 2
4+
while left < right:
5+
mid = (left + right) >> 1
6+
if arr[mid] > arr[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

+35-40
Original file line numberDiff line numberDiff line change
@@ -86,15 +86,14 @@
8686
```python
8787
class Solution:
8888
def peakIndexInMountainArray(self, arr: List[int]) -> int:
89-
n = len(arr)
90-
left, right = 1, n - 2
89+
left, right = 1, len(arr) - 2
9190
while left < right:
92-
mid = (left + right) // 2
93-
if arr[mid] < arr[mid + 1]:
94-
left = mid + 1
95-
else:
91+
mid = (left + right) >> 1
92+
if arr[mid] > arr[mid + 1]:
9693
right = mid
97-
return right
94+
else:
95+
left = mid + 1
96+
return left
9897
```
9998

10099
### **Java**
@@ -104,59 +103,55 @@ class Solution:
104103
```java
105104
class Solution {
106105
public int peakIndexInMountainArray(int[] arr) {
107-
int n = arr.length;
108-
int left = 1, right = n - 2;
106+
int left = 1, right = arr.length - 2;
109107
while (left < right) {
110-
int mid = left + (right - left) / 2;
111-
if (arr[mid] < arr[mid + 1]) {
112-
left = mid + 1;
113-
} else {
108+
int mid = (left + right) >> 1;
109+
if (arr[mid] > arr[mid + 1]) {
114110
right = mid;
111+
} else {
112+
left = mid + 1;
115113
}
116114
}
117-
return right;
115+
return left;
118116
}
119117
}
120118
```
121119

122-
### **Go**
123-
124-
```go
125-
func peakIndexInMountainArray(arr []int) int {
126-
n := len(arr)
127-
left, right := 1, n-2
128-
for left < right {
129-
mid := left + (right-left)/2
130-
if arr[mid] < arr[mid+1] {
131-
left = mid + 1
132-
} else {
133-
right = mid
134-
}
135-
}
136-
return right
137-
}
138-
```
139-
140120
### **C++**
141121

142122
```cpp
143123
class Solution {
144124
public:
145125
int peakIndexInMountainArray(vector<int>& arr) {
146126
int left = 1, right = arr.size() - 2;
147-
while (left < right) {
148-
int mid = left + right >> 1;
149-
if (arr[mid] < arr[mid + 1]) {
150-
left = mid + 1;
151-
} else {
152-
right = mid;
153-
}
127+
while (left < right)
128+
{
129+
int mid = (left + right) >> 1;
130+
if (arr[mid] > arr[mid + 1]) right = mid;
131+
else left = mid + 1;
154132
}
155-
return right;
133+
return left;
156134
}
157135
};
158136
```
159137
138+
### **Go**
139+
140+
```go
141+
func peakIndexInMountainArray(arr []int) int {
142+
left, right := 1, len(arr)-2
143+
for left < right {
144+
mid := (left + right) >> 1
145+
if arr[mid] > arr[mid+1] {
146+
right = mid
147+
} else {
148+
left = mid + 1
149+
}
150+
}
151+
return left
152+
}
153+
```
154+
160155
### **JavaScript**
161156

162157
```js

0 commit comments

Comments
 (0)
Please sign in to comment.