【JS】 搜尋旋轉排序陣列 #陣列 #二分查詢
阿新 • • 發佈:2018-11-21
假設按照升序排序的陣列在預先未知的某個點上進行了旋轉。
( 例如,陣列 [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
示例 3:
輸入: nums = [3,1], target = 1
輸出: 1
示例 4:
輸入: nums = [3,1], target = 3
輸出: 0
解法一:
使用了 indexOf() 函式,定位最小數 min 和最大數 max,
與目標值 target 對比大小確定 開始 lo 和結束 hi 的位置,
最後二分查詢
// 2018/11/21 Web 上午 var search = function(nums, target) { var min=Math.min.apply(null,nums) var max=Math.max.apply(null,nums) var pos,lo,hi,mid,len=nums.length if(target>nums[len-1] ){ pos = nums.indexOf(max) lo = 0;hi = pos }else{ pos = nums.indexOf(min) lo=pos;hi=len-1 } // console.log(lo,hi) while(lo<=hi){ mid = Math.ceil((lo+hi)/2); if(nums[mid] == target) return mid; if(nums[mid] < target){ lo = mid+1 }else{ hi = mid-1 } } return -1; };
196 / 196 個通過測試用例
執行用時:80 ms