http://oj.leetcode.com/problems/search-in-rotated-sorted-array-ii/
如果在数组中有重复的元素,则不一定说必定前面或者后面的一半是有序的,所以有个while循环的处理。
#include <iostream> using namespace std; class Solution { public: bool binarySearch(int A[],int target,int begin,int end) { int mid = (begin+end)/2; if(target == A[mid]) return true; if(target == A[begin]) return true; if(target == A[end]) return true; if(begin>=end) return false; while(A[begin] == A[mid]) begin++; if(A[begin]<A[mid])//前面有序 { if(target>A[begin] && target<A[mid]) //在前面 return binarySearch(A,target,begin,mid-1); else return binarySearch(A,target,mid+1,end); //在后面 } else if(A[mid]<=A[end])//后面有序 { while(A[mid] == A[end]) end--; if(target>A[mid] && target<A[end]) //在后面 return binarySearch(A,target,mid+1,end); else return binarySearch(A,target,begin,mid-1);//在前面 } return false; } bool search(int A[], int n, int target) { return binarySearch(A,target,0,n-1); } }; int main() { Solution myS; int A[] = {1,3,1,1,1}; bool ans = myS.search(A,5,3); cout<<ans<<endl; return 0; }
LeetCode OJ--Search in Rotated Sorted Array II
原文:http://www.cnblogs.com/qingcheng/p/3546363.html