Search in Rotated Sorted Array
题意:
Suppose a sorted array is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).
You are given a target value to search. If found in the array return its index, otherwise return -1.
主要分下面三种情况,看target在那那个位置:
其实这道题直接用for循环遍历一遍也可以,但考虑到使用二分法,则用如下:
代码1:
public class Solution {
public int search(int[] A, int target) {
int l = 0;
int r = A.length - 1;
while (l <= r) {
int mid = (l + r) / 2;
if (target == A[mid]) return mid;
if (A[l] <= A[r]) { //one
if (target < A[mid]) r = mid - 1;
else l = mid + 1;
} else if (A[l] <= A[mid]) { //two
if (target > A[mid] || target < A[l]) l = mid + 1;
else r = mid - 1;
} else { //three
if (target < A[mid] || target > A[r]) r = mid - 1;
else l = mid + 1;
}
}
return -1;
}
}
代码2:
public class Solution {
public int search(int[] nums, int target) {
int start = 0;
int end = nums.length - 1;
while (start <= end){
int mid = (start + end) / 2;
if (nums[mid] == target)
return mid;
if (nums[start] <= nums[mid]){
if (target < nums[mid] && target >= nums[start])
end = mid - 1;
else
start = mid + 1;
}
if (nums[mid] <= nums[end]){
if (target > nums[mid] && target <= nums[end])
start = mid + 1;
else
end = mid - 1;
}
}
return -1;
}
}
本文介绍了一种在未知旋转点的有序数组中查找目标值的方法。文章提供了两种使用二分查找法解决问题的实现方案,并详细解释了每一步的判断条件。

被折叠的 条评论
为什么被折叠?



