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.
Solution:
唯一需要判断的地方是如果刚好在duplicate的地方分开了怎么办,这样的时候 mid没有意义了。
1 public class Solution { 2 public boolean search(int[] A, int target) { 3 // IMPORTANT: Please reset any member data you declared, as 4 // the same Solution instance will be reused for each test case. 5 int end = A.length - 1; 6 int start = 0; 7 if (A[start] == A[end]){ 8 if (A[start]==target) return true; 9 int i = A[start]; 10 while (start <= end && A[start] == i) start ++; 11 while (start <= end && A[end] == i) end --; 12 } 13 while(start <= end){ 14 int mid = (end + start) / 2; 15 if(target == A[mid]) return true; 16 if(A[start] <= A[mid]){//left half is sorted 17 if(A[start] <= target && target < A[mid]) end = mid - 1; 18 else start = mid + 1; 19 } 20 else{ 21 if(A[mid] < target && target <= A[end]) start = mid + 1; 22 else end = mid - 1; 23 } 24 } 25 return false; 26 } 27 }