标签:
原题链接在这里:https://leetcode.com/problems/search-in-rotated-sorted-array/
与Find Minimum in Rotated Sorted Array类似。因为rotate, 所以不能直接用Binary Search, 需要进行 二次判定。
case 1: nums[mid] == target, return mid.
case 2: nums[mid] < nums[r]. 此时说明 右侧是正常升序,没有rotation, 若是这种情况下 target > nums[mid] && target <= nums[r] 就在右侧查找,其他情况左侧查找。
case 3: nums[mid] > nums[r]. 此时说明 左侧是正常升序,没有rotation, 若是这种情况下 target < nums[mid] && target >= nums[l] 就在左侧查找,其他情况右侧查找
AC Java:
1 public class Solution { 2 public int search(int[] nums, int target) { 3 if(nums == null || nums.length == 0){ 4 return -1; 5 } 6 int l = 0; 7 int r = nums.length - 1; 8 int res = -1; 9 while(l<=r){ 10 int mid = l+(r-l)/2; 11 if(target == nums[mid]){ 12 res = mid; 13 return res; 14 } 15 if(nums[mid]<nums[r]){ 16 if(target > nums[mid] && target <= nums[r]){ 17 l = mid+1; 18 }else{ 19 r = mid-1; 20 } 21 }else{ 22 if(target < nums[mid] && target >= nums[l]){ 23 r = mid-1; 24 }else{ 25 l = mid+1; 26 } 27 } 28 29 } 30 return res; 31 } 32 }
LeetCode Search in Rotated Sorted Array
标签:
原文地址:http://www.cnblogs.com/Dylan-Java-NYC/p/4855301.html