Search in Rotated Sorted Array
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).
You are given a target value to search. If found in the array return its index, otherwise return -1.
You may assume no duplicate exists in the array.
Binary Search
Time Complexity
O(logn)Space ComplexityO(1)思路
If target == nums[mid]; return mid;
If target nums[mid] < nums[right], mid to right is sorted, so we just need to know if target is between mid to right. If target nums[mid] > nums[right], left to mid is sorted, so we just need to know if target is between left to mid.代码
public int search(int[] nums, int target) { if(nums == null || nums.length == 0){ return -1; } int start = 0, end = nums.length - 1; while(start + 1 < end){ int mid = start + (end - start)/2; if(nums[mid] == target){ return mid; } if(nums[mid] < nums[end]){ //right part is sorted if(nums[mid] < target && target <= nums[end]){ start = mid + 1; }else{ end = mid - 1; } }else if(nums[mid] > nums[end]){ //left part is sorted if(nums[start] <= target && target < nums[mid]){ end = mid - 1; }else{ start = mid + 1; } }else{ start++; } } if(nums[start] == target){ return start; } if(nums[end] == target){ return end; } return -1;}