您的位置:首页 > 其它

LeetCode-Search in Rotated Sorted Array II-在旋转数组中搜索-二分查找

2014-10-20 18:52 786 查看
https://oj.leetcode.com/problems/search-in-rotated-sorted-array-ii/

当允许相等时,就要考虑各种边界条件。我的策略是把每个>,<,=都分类讨论,这样比较复杂,但是逻辑比较清晰。

另当A[l]=A[r]时,需要线性搜索一个不等于A[l]的位置收缩l指针。

class Solution {
public:
bool search(int A[], int n, int target) {
int l=0;
int r=n-1;
int x=target;
while(r>l){
int mid=(l+r)/2;
if (x==A[mid]) return true;
if (A[l]<A[r]) {
if (x<A[mid]) r=mid;
else l=mid+1;
}
else if(A[l]>A[r]){ //Al>Ar
if (A[mid]<A[r]) {
if (x<A[mid]) r=mid;
else {//x > mid
if (x>A[r]) r=mid;
else l=mid+1;
}
}
else if(A[mid]>A[r]){
if (x>A[mid]) l=mid+1;
else {
if (x>A[r]) r=mid;
else l=mid+1;
}
}
else { //A[mid]==A[r]
if (A[mid]>A[l]) {
if (x<A[mid]){
if(x>A[r]) r=mid;
else l=mid+1;
}
else l=mid+1;
}
else r=mid;
}
}
else {  //A[l]==A[r]
bool eq=true;
for(int i=l;i<=r;i++) {
if(A[i]!=A[l]) {
eq=false;
l=i;
break;
}
}
if(eq) return false;
}
}
if (A[l]==x) return true;
return false;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐