问题原始链接 https://leetcode.com/problems/search-in-rotated-sorted-array
假设一个有序数组经过了旋转,例如 [0 1 2 4 5 6 7] 经过旋转变成了 [4 5 6 7 0 1 2]。
你需要搜索一个给定值,如果找到则返回索引,否则返回-1。
你可以假设数组中没有重复元素。
思路:采用二分查找法解决该问题。
public class Solution {
public static int search(int[] nums, int target) {
if (nums == null || nums.length == 0) {
return -1;
}
return search(nums, target, 0, nums.length - 1);
}
private static int search(int[] nums, int target, int low, int high) {
if (low > high) {
return -1;
}
if (low == high) {
return nums[low] == target ? low : -1;
}
int mid = (low + high) >> 1;
if (nums[mid] == target) {
return mid;
}
if (nums[low] <= nums[mid]) {
if (nums[low] <= target && target < nums[mid]) {
return search(nums, target, low, mid - 1);
} else {
return search(nums, target, mid + 1, high);
}
} else {
if (nums[mid] < target && target <= nums[high]) {
return search(nums, target, mid + 1, high);
} else {
return search(nums, target, low, mid - 1);
}
}
}
}