81. Search in Rotated Sorted Array II
1 class Solution { 2 public boolean search(int[] nums, int target) { 3 if(nums.length == 0) return false; 4 int lo = 0, hi = nums.length-1; 5 while(lo <= hi) { 6 int mid = lo + (hi-lo) / 2; 7 if(nums[mid] == target) return true; 8 if(nums[mid] == nums[hi]) { //要是遇到mid和hi或lo重复 为了判断哪边是单调的 必须hi-- or lo++ 9 hi--; 10 continue; 11 } 12 if(nums[mid] == nums[lo]) { 13 lo++; 14 continue; 15 } 16 if(nums[mid] <= nums[hi]) { 17 if(nums[mid] < target && target <= nums[hi]) { 18 lo = mid + 1; 19 }else { 20 hi = mid - 1; 21 } 22 }else { 23 if(nums[mid] > target && target >= nums[lo]) { 24 hi = mid - 1; 25 }else { 26 lo = mid + 1; 27 } 28 } 29 } 30 return false; 31 32 } 33 }