搜索旋转排序数组
1、題目描述
假設按照升序排序的數(shù)組在預先未知的某個點上進行了旋轉(zhuǎn)。
( 例如,數(shù)組 [0,1,2,4,5,6,7] 可能變?yōu)?[4,5,6,7,0,1,2] )。
搜索一個給定的目標值,如果數(shù)組中存在這個目標值,則返回它的索引,否則返回 -1 。
你可以假設數(shù)組中不存在重復的元素。
你的算法時間復雜度必須是 O(log n) 級別。
示例 1:
輸入: nums = [4,5,6,7,0,1,2], target = 0 輸出: 4示例 2:
輸入: nums = [4,5,6,7,0,1,2], target = 3 輸出: -12、解法
2.1 先找旋轉(zhuǎn)點
public int search(int[] nums, int target) {if(nums ==null || nums.length<1) {return -1;}int right=nums.length-1, left=0, mid;while (left<right) {mid = (left+right)/2;if(nums[mid]>nums[right]) {left = mid+1;}else {right = mid;}}int split_k = left;left=0;right=nums.length-1;if(target>= nums[split_k] && target<=nums[right]) {left = split_k;}else {right = split_k;}while (left<=right) {mid=(left+right)/2;if(nums[mid] == target) {return mid;}else if(target>nums[mid]) {left = mid+1;}else {right = mid-1;}}return -1;}總結(jié)