您的位置:首页 > 其它

[LeetCode] Search in Rotated Sorted Array II

2012-11-25 14:40 429 查看
Follow up for "Search in Rotated Sorted Array":
What if duplicates are allowed?

Would this affect the run-time complexity? How and why?

Write a function to determine if a given target is in the array.

class Solution {
public:
int findPos(int a[], int left, int right)
{
if (left > right)
return -1;

int mid = left + (right - left) / 2;

if (a[left] < a[mid])
{
int pos = findPos(a, mid + 1, right);
if (pos == -1)
return left;
else
return a[pos] <= a[left] ? pos : left;
}
else if (a[left] > a[mid])
{
int pos = findPos(a, left, mid - 1);
if (pos == -1)
return mid;
else
return a[pos] < a[mid] ? pos : mid;
}
else
{
int pos1 = findPos(a, left, mid - 1);
int pos2 = findPos(a, mid + 1, right);
if (pos1 == -1 && pos2 == -1)
return mid;
else if (pos1 == -1)
return a[mid] < a[pos2] ? mid : pos2;
else if (pos2 == -1)
return a[mid] <= a[pos1] ? mid : pos1;
else
{
if (a[pos1] < a[pos2])
return a[mid] <= a[pos1] ? mid : pos1;
else
return a[mid] < a[pos2] ? mid : pos2;
}
}
}

bool bsearch(int a[], int left, int right, int key)
{
if (left > right)
return false;

int mid = left + (right - left) / 2;

if (a[mid] == key)
return true;
else if (a[mid] < key)
return bsearch(a, mid + 1, right, key);
else
return bsearch(a, left, mid - 1, key);
}

bool search(int A[], int n, int target) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int pos = findPos(A, 0, n - 1);
return bsearch(A, 0, pos - 1, target) || bsearch(A, pos, n - 1, target);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: