您的位置:首页 > 其它

【leetcode】Array——Search in Rotated Sorted Array(33)

2016-02-14 11:15 405 查看
题目:

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.

You may assume no duplicate exists in the array.

自己的思路:

递归,如果是正常的顺序那一半,则用binary search,如果是在转折的另一半,则递归,最终会统一成binary search

public int search(int[] nums, int target) {
if(nums.length==0)
return -1;

return getIndex(nums,0,nums.length-1,target);

}

private int binarySearch(int []nums,int start,int end,int target){
while(start<=end){
int mid = (start+end)/2;
if(target>nums[mid])
start=mid+1;
else if(target<nums[mid])
end=mid-1;
else
return mid;
}
return -1;
}

private int getIndex(int nums[],int start,int end,int target){
int MID = (start+end) /2;

if(nums[MID]>nums[start]){
if(target<=nums[MID]&&target>=nums[start]){
return binarySearch(nums, start, MID, target);
}else{
return getIndex(nums, MID, end,target);
}
}
else if(nums[MID]<nums[start]){
if(target>=nums[MID]&&target<=nums[end]){
return binarySearch(nums, MID, end, target);
}else{
return getIndex(nums, start, MID,target);
}
}else{
if(nums[start]==target)
return start;
else if(nums[end]==target)
return end;
else
return -1;
}
}


自己的思路虽然勉强解决的问题,但是思路不清晰,不简洁,借鉴别人的思路

leetcode算法:https://leetcode.com/discuss/22678/revised-binary-search
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: