leetcode33搜尋旋轉排序陣列(java)
阿新 • • 發佈:2018-12-31
假設按照升序排序的陣列在預先未知的某個點上進行了旋轉。
( 例如,陣列 [0,1,2,4,5,6,7] 可能變為 [4,5,6,7,0,1,2] )。
搜尋一個給定的目標值,如果陣列中存在這個目標值,則返回它的索引,否則返回 -1 。
你可以假設陣列中不存在重複的元素。
你的演算法時間複雜度必須是 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
輸出: -1
題目連結
分析:二分查詢問題,具體見圖片(圖片上最後一個 right=mid-1)
public static int search(int[] nums, int target) { if(nums.length == 0) return -1; int right = nums.length - 1; int left = 0; while (left <= right) { int mid = 0 + (left + right)/2; if(target == nums[left]){ return left; }else if(target == nums[right]){ return right; }else if(target == nums[mid]){ return mid; }else{ if (target > nums[mid]) { if (nums[mid] < nums[0]) { if(target < nums[0]){//3 left = mid +1; }else{//1 right = mid - 1; } } else {//1 left = mid + 1; } } else if (target < nums[mid]) { if (nums[mid] > nums[0]) { if(target < nums[0]){//5 left = mid +1; }else{//4 right = mid -1; } } else {//6 right = mid - 1; } } } } return -1; }