搜索旋转排序数组
不包含重复元素
class Solution {
public int search(int[] nums, int target) {
int low = 0;
int high = nums.length - 1;
while (low <= high) {
int mid = low + ((high - low) >> 1);
if (nums[mid] == target) {
return mid;
}
if (nums[0] <= nums[mid]) {
if (nums[0] <= target && target < nums[mid]) {
high = mid - 1;
} else {
low = mid + 1;
}
} else {
if (nums[mid] < target && target <= nums[nums.length - 1]) {
low = mid + 1;
} else {
high = mid - 1;
}
}
}
return -1;
}
}
包含重复元素
不包含重复元素
class Solution {
public int findMin(int[] nums) {
int low = 0;
int high = nums.length - 1;
while (low < high) {
if (nums[low] <= nums[high]) {
return nums[low];
}
int mid = low + ((high - low) >> 1);
if (nums[low] <= nums[mid]) {
low = mid + 1;
} else {
high = mid;
}
}
return nums[low];
}
}
包含重复元素
class Solution {
public int findMin(int[] numbers) {
int low = 0;
int high = numbers.length - 1;
while (low < high) {
int pivot = low + (high - low) / 2;
if (numbers[pivot] < numbers[high]) {
high = pivot;
} else if (numbers[pivot] > numbers[high]) {
low = pivot + 1;
} else {
high -= 1;
}
}
return numbers[low];
}
}