LeetCode33 搜尋旋轉排序陣列

KJ_Fighting!發表於2020-11-09

LeetCode33 搜尋旋轉排序陣列

給你一個升序排列的整數陣列 nums ,和一個整數 target 。

假設按照升序排序的陣列在預先未知的某個點上進行了旋轉。(例如,陣列 [0,1,2,4,5,6,7] 可能變為 [4,5,6,7,0,1,2] )。

請你在陣列中搜尋 target ,如果陣列中存在這個目標值,則返回它的索引,否則返回 -1 。

示例 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 = [1], target = 0
輸出:-1

思路:

關鍵是要找到有序的那一個序列。

如果中間的數小於最右邊的數,則右半段是有序的,若中間數大於最右邊數,則左半段是有序的,我們只要在有序的半段裡用首尾兩個陣列來判斷目標值是否在這一區域內,這樣就可以確定保留哪半邊了。

class Solution {
    public int search(int[] nums, int target) {
    int l=0,r=nums.length-1;
    while(l<=r){
        int m=(l+r)/2;
        if(nums[m]==target)return m;
        else if(nums[m]<nums[r]){
            if(nums[m]<target&&nums[r]>=target){
                l=m+1;
            }
            else r=m-1;        
        }
        else{
             if(nums[l]<=target&&nums[m]>target){
                r=m-1;
            }
            else l=m+1;
        }
    }return -1;}
    
}

相關文章