1. 程式人生 > >Leetcode---搜尋旋轉排序陣列--O(logn)

Leetcode---搜尋旋轉排序陣列--O(logn)

搜尋旋轉排序陣列

題目連結:搜尋旋轉排序陣列

思路:
  • 該題目是二叉搜尋的變形,變化就是,將一個有序陣列,從一個未知節點折斷放到末尾
  • 這裡處理方式還是相同的,找到mid位置,判斷該數是否與目標值相同,如果相同return
  • 不同就與當前範圍的第一個數比較,如果不小於,則說明該數前面的數字是有序的,再判斷target是否在該範圍內,不在就轉到後面
  • 如果小於,則說明前面的數中,包含折斷位置,那麼該數後面的數一定是有序的,即判斷是否在後面的範圍內,不在則往前找。
	public static int search(int[] nums, int target)
{ return search(nums,0,nums.length-1,target); } public static int search(int[] nums,int first,int last,int target) { while(first<=last) { int mid = first + ((last-first)>>1); if(nums[mid]==target) { return mid; } if(nums[mid]>=nums[first]) { //前面是有序的 if
(target>=nums[first]&&target<nums[mid]) { //在前面搜尋即可 last = mid-1; }else { first = mid+1; } }else { //後面是有序的 if(target>nums[mid]&&target<=nums[last]) { first = mid+1; }else { last = mid-1; } } } return -1; }