File tree 5 files changed +119
-21
lines changed
solution/0100-0199/0154.Find Minimum in Rotated Sorted Array II
5 files changed +119
-21
lines changed Original file line number Diff line number Diff line change 34
34
35
35
<!-- 这里可写通用的实现逻辑 -->
36
36
37
+ 二分法。
38
+
39
+ 若 ` nums[m] > nums[r] ` ,说明最小值在 m 的右边;若 ` nums[m] < nums[r] ` ,说明最小值在 m 的左边(包括 m);若相等,无法判断,直接将 r 减 1。循环比较。
40
+
41
+ 最后返回 ` nums[l] ` 即可。
42
+
37
43
<!-- tabs:start -->
38
44
39
45
### ** Python3**
@@ -65,19 +71,53 @@ class Solution {
65
71
int l = 0 , r = nums. length - 1 ;
66
72
while (l < r) {
67
73
int m = (l + r) >>> 1 ;
68
- if (nums[m] > nums[r]) {
69
- l = m + 1 ;
70
- } else if (nums[m] < nums[r]) {
71
- r = m;
72
- } else {
73
- -- r;
74
- }
74
+ if (nums[m] > nums[r]) l = m + 1 ;
75
+ else if (nums[m] < nums[r]) r = m;
76
+ else -- r;
75
77
}
76
78
return nums[l];
77
79
}
78
80
}
79
81
```
80
82
83
+ ### ** C++**
84
+
85
+ ``` cpp
86
+ class Solution {
87
+ public:
88
+ int findMin(vector<int >& nums) {
89
+ int l = 0, r = nums.size() - 1;
90
+ while (l < r) {
91
+ int m = (l + r) >> 1;
92
+ if (nums[ m] > nums[ r] ) l = m + 1;
93
+ else if (nums[ m] < nums[ r] ) r = m;
94
+ else --r;
95
+ }
96
+ return nums[ l] ;
97
+ }
98
+ };
99
+ ```
100
+
101
+ ### **JavaScript**
102
+
103
+ ```js
104
+ /**
105
+ * @param {number[]} nums
106
+ * @return {number}
107
+ */
108
+ var findMin = function (nums) {
109
+ let l = 0,
110
+ r = nums.length - 1;
111
+ while (l < r) {
112
+ const m = (l + r) >> 1;
113
+ if (nums[m] > nums[r]) l = m + 1;
114
+ else if (nums[m] < nums[r]) r = m;
115
+ else --r;
116
+ }
117
+ return nums[l];
118
+ };
119
+ ```
120
+
81
121
### ** ...**
82
122
83
123
```
Original file line number Diff line number Diff line change @@ -64,19 +64,53 @@ class Solution {
64
64
int l = 0 , r = nums. length - 1 ;
65
65
while (l < r) {
66
66
int m = (l + r) >>> 1 ;
67
- if (nums[m] > nums[r]) {
68
- l = m + 1 ;
69
- } else if (nums[m] < nums[r]) {
70
- r = m;
71
- } else {
72
- -- r;
73
- }
67
+ if (nums[m] > nums[r]) l = m + 1 ;
68
+ else if (nums[m] < nums[r]) r = m;
69
+ else -- r;
74
70
}
75
71
return nums[l];
76
72
}
77
73
}
78
74
```
79
75
76
+ ### ** C++**
77
+
78
+ ``` cpp
79
+ class Solution {
80
+ public:
81
+ int findMin(vector<int >& nums) {
82
+ int l = 0, r = nums.size() - 1;
83
+ while (l < r) {
84
+ int m = (l + r) >> 1;
85
+ if (nums[ m] > nums[ r] ) l = m + 1;
86
+ else if (nums[ m] < nums[ r] ) r = m;
87
+ else --r;
88
+ }
89
+ return nums[ l] ;
90
+ }
91
+ };
92
+ ```
93
+
94
+ ### **JavaScript**
95
+
96
+ ```js
97
+ /**
98
+ * @param {number[]} nums
99
+ * @return {number}
100
+ */
101
+ var findMin = function (nums) {
102
+ let l = 0,
103
+ r = nums.length - 1;
104
+ while (l < r) {
105
+ const m = (l + r) >> 1;
106
+ if (nums[m] > nums[r]) l = m + 1;
107
+ else if (nums[m] < nums[r]) r = m;
108
+ else --r;
109
+ }
110
+ return nums[l];
111
+ };
112
+ ```
113
+
80
114
### ** ...**
81
115
82
116
```
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public:
3
+ int findMin (vector<int >& nums) {
4
+ int l = 0 , r = nums.size () - 1 ;
5
+ while (l < r) {
6
+ int m = (l + r) >> 1 ;
7
+ if (nums[m] > nums[r]) l = m + 1 ;
8
+ else if (nums[m] < nums[r]) r = m;
9
+ else --r;
10
+ }
11
+ return nums[l];
12
+ }
13
+ };
Original file line number Diff line number Diff line change @@ -3,13 +3,9 @@ public int findMin(int[] nums) {
3
3
int l = 0 , r = nums .length - 1 ;
4
4
while (l < r ) {
5
5
int m = (l + r ) >>> 1 ;
6
- if (nums [m ] > nums [r ]) {
7
- l = m + 1 ;
8
- } else if (nums [m ] < nums [r ]) {
9
- r = m ;
10
- } else {
11
- --r ;
12
- }
6
+ if (nums [m ] > nums [r ]) l = m + 1 ;
7
+ else if (nums [m ] < nums [r ]) r = m ;
8
+ else --r ;
13
9
}
14
10
return nums [l ];
15
11
}
Original file line number Diff line number Diff line change
1
+ /**
2
+ * @param {number[] } nums
3
+ * @return {number }
4
+ */
5
+ var findMin = function ( nums ) {
6
+ let l = 0 ,
7
+ r = nums . length - 1 ;
8
+ while ( l < r ) {
9
+ const m = ( l + r ) >> 1 ;
10
+ if ( nums [ m ] > nums [ r ] ) l = m + 1 ;
11
+ else if ( nums [ m ] < nums [ r ] ) r = m ;
12
+ else -- r ;
13
+ }
14
+ return nums [ l ] ;
15
+ } ;
You can’t perform that action at this time.
0 commit comments