您的位置:首页 > 其它

33. Search in Rotated Sorted Array

2016-03-09 15:36 363 查看

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: