LeetCode33. 搜索旋轉排序數組

題目:

假設按照升序排序的數組在預先未知的某個點上進行了旋轉。( 例如,數組 [0,1,2,4,5,6,7] 可能變爲 [4,5,6,7,0,1,2] )。搜索一個給定的目標值,如果數組中存在這個目標值,則返回它的索引,否則返回 -1 。你可以假設數組中不存在重複的元素。你的算法時間複雜度必須是 O(log n) 級別。

思路:

這個題在頭條面試時候問過啊,唉還是要多刷點題。下面是思路的草稿。

那麼就可以使用異或了,滿足一個和三個1都輸出1,(注意要使得哪些條件爲1,才能湊出這個規律)

題解:

 int search(vector<int>& nums, int target) {
        int l = 0;
        int r = nums.size() - 1;
        int mid;
        while (l < r){
            mid = l + (r - l) / 2;
            if ((nums[0]> target) ^ (nums[mid] < nums[0]) ^ (nums[mid] < target))
                l = mid + 1;
            else
                r = mid;
        }
        return l == r && nums[l] == target? l:-1;
    }

這是基於二分查找,我再貼一下二分查找的代碼:

int my_binary_search(vector<int>& nums, int target){//二分查找,返回對應目標索引
    int len = nums.size();
    if(len == 0){
        return -1;
    }
    // left ,right 標記查找的起點和終點
    int left = 0, right = len, mid = 0;
    while(left <= right){
        mid = (left+right)/2;
        if(nums[mid] > target){//檢查左邊
            right = mid - 1; 
        }else if(nums[mid] < target){//檢查右邊
            left = mid + 1;  
        }else{
            return mid;
        }
    }
    return -1;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章