/*本题与的Search in Rotated Sorted Array差别在于可能有重复的
元素,但还是可以采用与Search in Rotated Sorted Array类似的方法。
但是在判断数组哪一半有序时会稍微不一样。
方法参考自:https://github.com/soulmachine/leetcode*/
class Solution {
public:
bool search(int A[], int n, int target) {
int start(0),end(n);
while(start < end){
int mid = (start + end) / 2;
if(A[mid] == target) return true;
if(A[start] < A[mid]){//数组前半部分有序
if(A[start] <= target && target < A[mid]){
end = mid;
}
else{
start = mid + 1;
}
}
else if(A[start] > A[mid]){//数组后半部分单调不减
if(A[mid] < target && target <= A[end-1]){
start = mid + 1;
}
else{
end = mid;
}
}
else{//过掉重复元素
++start;
}
}
return false;
}
};LeetCode之Search in Rotated Sorted Array II
最新推荐文章于 2020-06-27 10:28:57 发布
本文讨论了如何在存在重复元素的旋转排序数组中高效地进行搜索操作,通过对比与经典问题的不同之处,提出了一种改进的算法策略。
364

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



