/** * 81. Search in Rotated Sorted Array II. * äºåæ¥æ¾æ³ãï¼å¸¦å»éï¼ * å 为æ°ç»ä¸å¯è½æéå¤ï¼æä»¥å½ nums[mid] == nums[left] æ nums[mid] == nums[right] æ¶ï¼ä¸è½å¤æåªè¾¹æåºãæ¤æ¶æä»¬ç´æ¥å°ä¸æ +- 1ï¼è¿è¡å»éå¤çã * @author LBW */ public class SearchInRotatedSortedArrayII { public boolean search(int[] nums, int target) { int n = nums.length; int left = 0, right = n - 1; while (left < right) { int mid = left + (right - left) / 2; if (nums[mid] == target) return true; if (nums[mid] == nums[left]) { // æ¤æ¶éè¦å»é left += 1; } else if (nums[mid] == nums[right]) { // æ¤æ¶éè¦å»é right -= 1; } else if (nums[mid] > nums[left]) { // 说æ [left, mid] æ¯æåºç if (nums[left] <= target && target <= nums[mid]) { right = mid - 1; } else { left = mid + 1; } } else { // 说æ [mid, right] æ¯æåºç if (nums[mid] <= target && target <= nums[right]) { left = mid + 1; } else { right = mid - 1; } } } if (target == nums[left]) { return true; } return false; } }