题目:
在旋转数组中寻找数组,旋转数组在旋转前为不降序排序数组,可能有重复数字。若没找到,返回-1。
public boolean search(int[] data,int target)
{
if(data == null||data.length == 0)
return false;
int left=0;
int right=data.length-1;
while(left < right-1)
{
int mid=left+(right-left)/2;
if(data[mid] == target)
return true;
if(data[mid] > data[left])//data[mid]在左半段
{
if(data[mid] > target&&data[left] <= target)
right=mid;
else
left=mid;
}else if(data[mid] < data[left])//在右半段
{
if(data[mid] < target&&target <= data[right])
left=mid;
else
right=mid;
}else //data[mid] == data[left],无法判断data[mid]在哪半个区间中
left++;//递增left缩小搜索范围。
}
if(data[left] == target)
return true;
if(data[right] == target)
return true;
return false;
}