-
Notifications
You must be signed in to change notification settings - Fork 56
/
Solution.java
32 lines (29 loc) · 1016 Bytes
/
Solution.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package g0101_0200.s0154_find_minimum_in_rotated_sorted_array_ii;
// #Hard #Array #Binary_Search #Binary_Search_II_Day_13
// #2022_06_25_Time_1_ms_(77.09%)_Space_44.6_MB_(7.09%)
public class Solution {
public int findMin(int[] nums) {
if (nums == null || nums.length == 0) {
return 0;
}
return find(0, nums.length - 1, nums);
}
private int find(int left, int right, int[] nums) {
if (left + 1 >= right) {
return Math.min(nums[left], nums[right]);
}
int mid = left + (right - left) / 2;
if (nums[left] == nums[right] && nums[left] == nums[mid]) {
return Math.min(find(left, mid, nums), find(mid, right, nums));
}
if (nums[left] >= nums[right]) {
if (nums[mid] >= nums[left]) {
return find(mid, right, nums);
} else {
return find(left, mid, nums);
}
} else {
return find(left, mid, nums);
}
}
}