Suppose an array sorted in ascending order 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.
解题思路同Search in Rotated Sorted ArrayII。链接:http://blog.youkuaiyun.com/panzw2015/article/details/54317631
AC解:
public class Solution {
private int ret=-1;
public void setRet(int x)
{
ret=x;
}
public int search(int[] nums, int target) {
int i;
int nlen = nums.length;
if(nlen==1)
{
if(nums[0]==target)
return 0;
else
return -1;
}
boolean flag = false; // not rotated
for(i=1;i<nlen;i++)
{
if(nums[i]>=nums[i-1])
continue;
else
{
flag = true; // rotated
break;
}
}
if(flag==false)
find(nums,target,0,nlen-1);
else
{
find(nums,target,0,i-1);
find(nums,target,i,nlen-1);
}
return ret;
}
public void find(int[] nums,int target,int i,int j)
{
if(i<=j)
{
int l=i,r=j;
int mid = l+(r-l)/2;
if(nums[mid]==target)
this.setRet(mid);
else if(nums[mid]>target)
find(nums,target,l,mid-1);
else
find(nums,target,mid+1,r);
}
}
}