File tree Expand file tree Collapse file tree 10 files changed +237
-18
lines changed
0100-0199/0162.Find Peak Element
0800-0899/0852.Peak Index in a Mountain Array Expand file tree Collapse file tree 10 files changed +237
-18
lines changed Original file line number Diff line number Diff line change 44
44
45
45
<p ><strong >进阶:</strong >你可以实现时间复杂度为 <code >O(logN)</code ><em > </em >的解决方案吗?</p >
46
46
47
-
48
47
## 解法
49
48
50
49
<!-- 这里可写通用的实现逻辑 -->
51
50
51
+ 二分查找。
52
+
52
53
<!-- tabs:start -->
53
54
54
55
### ** Python3**
55
56
56
57
<!-- 这里可写当前语言的特殊实现逻辑 -->
57
58
58
59
``` 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
60
70
```
61
71
62
72
### ** Java**
63
73
64
74
<!-- 这里可写当前语言的特殊实现逻辑 -->
65
75
66
76
``` 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
+ ```
67
109
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
+ };
68
128
```
69
129
70
130
### **...**
Original file line number Diff line number Diff line change 39
39
40
40
## Solutions
41
41
42
+ Binary search.
43
+
42
44
<!-- tabs:start -->
43
45
44
46
### ** Python3**
45
47
46
48
``` 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
48
59
```
49
60
50
61
### ** Java**
51
62
52
63
``` 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
+ ```
53
96
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
+ };
54
115
```
55
116
56
117
### **...**
Original file line number Diff line number Diff line change
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
+ };
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change @@ -2,9 +2,12 @@ class Solution {
2
2
public int findPeakElement (int [] nums ) {
3
3
int left = 0 , right = nums .length - 1 ;
4
4
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
+ }
8
11
}
9
12
return left ;
10
13
}
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change 75
75
76
76
<!-- 这里可写通用的实现逻辑 -->
77
77
78
- 二分查找
78
+ 二分查找。
79
79
80
80
<!-- tabs:start -->
81
81
@@ -143,10 +143,9 @@ func peakIndexInMountainArray(arr []int) int {
143
143
class Solution {
144
144
public:
145
145
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;
148
147
while (left < right) {
149
- int mid = left + ( right - left) / 2 ;
148
+ int mid = left + right >> 1 ;
150
149
if (arr[ mid] < arr[ mid + 1] ) {
151
150
left = mid + 1;
152
151
} else {
@@ -158,6 +157,28 @@ public:
158
157
};
159
158
```
160
159
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
+
161
182
### ** ...**
162
183
163
184
```
Original file line number Diff line number Diff line change 49
49
50
50
## Solutions
51
51
52
- binary search
52
+ Binary search.
53
53
54
54
<!-- tabs:start -->
55
55
@@ -113,10 +113,9 @@ func peakIndexInMountainArray(arr []int) int {
113
113
class Solution {
114
114
public:
115
115
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;
118
117
while (left < right) {
119
- int mid = left + ( right - left) / 2 ;
118
+ int mid = left + right >> 1 ;
120
119
if (arr[ mid] < arr[ mid + 1] ) {
121
120
left = mid + 1;
122
121
} else {
@@ -128,6 +127,28 @@ public:
128
127
};
129
128
```
130
129
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
+
131
152
### ** ...**
132
153
133
154
```
Original file line number Diff line number Diff line change 1
1
class Solution {
2
2
public:
3
3
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 ;
6
5
while (left < right) {
7
- int mid = left + ( right - left) / 2 ;
6
+ int mid = left + right >> 1 ;
8
7
if (arr[mid] < arr[mid + 1 ]) {
9
8
left = mid + 1 ;
10
9
} else {
@@ -13,4 +12,4 @@ class Solution {
13
12
}
14
13
return right;
15
14
}
16
- };
15
+ };
Original file line number Diff line number Diff line change
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
+ } ;
You can’t perform that action at this time.
0 commit comments