您的位置:首页 > 其它

在部分有序数组中查找定值

2016-06-23 17:53 197 查看
描述:给定一个有序数组经过部分旋转,如{0,1,2,3,4,5,6}旋转后{4,5,6,0,1,2,3};给定key值,若查找成功则返回数组中key值元素索引,否则返回-1。

思路一:暴力法,从数组头遍历到尾部,依次查找。

class Solution{
public:
int search(int A[],int n,int value)
{
if(n==0)return -1;
for(int i=0;i<n;i++)
{
if(A[i]==value)return i;
}
return -1;
}
};
思路二:利用二分查找。

class Solution{
public:
int search(int A[],int n,int value)
{
if(n==0)return -1;
int first=0;
int last=n-1;
while(first!=last)
{
const int mid=first+(last-first)/2;
if(A[mid]==value) return mid;
if(A[first]<A[mid])//分两种情况:1.前半部分有序2.后半部分有序
{
if(A[first]<=value&&A[mid]>value)
{
last=mid-1;
}
else
{
first=mid+1;
}
}
else
{
if(A[mid]<value&&A[last]>=value)
{
first=mid+1;
}
else
{
last=mid-1;
}
}

}
return -1;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode 数组