您的位置:首页 > 职场人生

89_leetcode_Search in Rotated Sorted Array II

2014-06-23 06:38 369 查看
Search in rotated Sorted Array; 如果数组中包含重复的数字

1:特殊情况;2:数组没有旋转;3:找到数组旋转的两部分,如果在寻找的过程中,三个(start, end, middle)索引的数字相同, 直接返回顺序查找的结果;3:找到两部分,对数字进行二分查找

bool search(int A[], int n, int target)
{
if(A == NULL || n <= 0)
{
return false;
}

if(A[0] < A[n-1])
{
return BinarySearch(A,0, n-1, target);
}

int start = 0;
int end = n - 1;

while(start < end - 1)
{
int middle = (start + end) / 2;
if(A[middle] == A[start] && A[middle] == A[end])
{
return linearSearch(A, n, target);
}
else if(A[middle] <= A[end])
{
end = middle;
}
else if(A[middle] >= A[start])
{
start = middle;
}
}

if(A[n-1] >= target && A[end] <= target)
{
return BinarySearch(A, end, n - 1 , target);
}
else if(A[start] >= target && A[0] <= target)
{
return BinarySearch(A, 0, start, target);
}
else
{
return false;
}
}

bool linearSearch(int A[], int n, int target)
{
for(int i = 0; i < n; i++)
{
if(A[i] == target)
{
return true;
}
}

return false;
}

bool BinarySearch(int A[], int start, int end, int target)
{
while(start <= end)
{
int middle = (start + end) / 2;
if(A[middle] == target)
{
return true;
}
else if(A[middle] > target)
{
end = middle - 1;
}
else
{
start = middle + 1;
}
}

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