思想:
允许原数组中有重复元素。
如果A[first] < A[mid],证明转折点在左部分,因为旋转后,左部分有序,右部分无序;
如果A[first] > A[mid],证明转折点在右部分,因为旋转后,左部分无序;
如果A[first]==A[mid],往下看一步;
<span style="font-size:18px;">class Solution {
public:
bool search(int A[], int n, int target) {
int first = 0, last = n;
while(first != last) {
int mid = first + (last - first) / 2;
if(A[mid] == target) {
return true;
}
if(A[first] < A[mid]) {
if(A[first] <= target && target < A[mid]) {
last = mid;
}
else {
first = mid + 1;
}
}
else if(A[first] > A[mid]) {
if(A[mid] <= target && target <= A[last-1]) {
first = mid + 1;
}
else {
last = mid;
}
}
else {
first++;
}
}
return false;
}
};</span>
本文介绍了一种改进的二分查找算法,用于在旋转数组中搜索特定元素,该算法能够处理数组中元素的重复情况。
1932

被折叠的 条评论
为什么被折叠?



