Follow up for "Search in Rotated Sorted Array":
What if duplicates are allowed?
Would this affect the run-time complexity? How and why?
Write a function to determine if a given target is in the array.
这道题和Search in Rotated Sorted Array I不同之处在于数组中有重复数字,因此用二分查找的时候要注意一些分界点的检查。这道题我没有自己去写,而是从网上找的别人的源码。
public boolean search(int[] A, int target) { int begin = 0; int end = A.length-1; while(begin < end) { int mid = (begin+end)/2; if(A[mid] == target)return true; else if(A[begin] == A[mid]) { for(int i = begin; i< mid; i++) if(A[i]==target)return true; begin = mid+1; } else if(A[begin] < A[mid])//begin-mid increase { if(A[begin] <= target && target < A[mid]) end = mid-1; else begin = mid+1; } else//mid-end increase { if(A[mid] < target && target <= A[end]) begin = mid+1; else end = mid-1; } } if(begin==end && A[begin]==target) return true; else return false; }