Leetcode---搜尋旋轉排序陣列--O(logn)
阿新 • • 發佈:2018-12-27
搜尋旋轉排序陣列
題目連結:搜尋旋轉排序陣列
思路:
- 該題目是二叉搜尋的變形,變化就是,將一個有序陣列,從一個未知節點折斷放到末尾
- 這裡處理方式還是相同的,找到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;
}