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;
}
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;
}
相关文章推荐
- [LeetCode] Search in Rotated Sorted Array II
- 【Leetcode】Search in Rotated Sorted Array II
- leetcode_Search in Rotated Sorted Array II
- [leetcode] Search in Rotated Sorted Array II
- Search in Rotated Sorted Array II [LeetCode]
- LeetCode-Search in Rotated Sorted Array II
- leetcode 98: Search in Rotated Sorted Array II
- LeetCode Online Judge 题目C# 练习 - Search in Rotated Sorted Array II
- 【leetcode】Search in Rotated Sorted Array II
- [LeetCode] Search in Rotated Sorted Array II 解题报告
- [Leetcode] Search in Rotated Sorted Array II
- LeetCode-Search in Rotated Sorted Array II
- leetcode Search in Rotated Sorted Array II
- LeetCode Search in Rotated Sorted Array II
- LeetCode - Search in Rotated Sorted Array II
- LeetCode : Search in Rotated Sorted Array II
- 【Leetcode】Search in Rotated Sorted Array II
- leetcode - Search in Rotated Sorted Array II
- [LeetCode] Search in Rotated Sorted Array II
- [LeetCode]Search in Rotated Sorted Array II