leetcode 搜索旋轉數組

33. 搜索旋轉排序數組

難度中等581收藏分享切換爲英文關注反饋

假設按照升序排序的數組在預先未知的某個點上進行了旋轉。

( 例如,數組 [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

 

class Solution {
public:
    int search(vector<int>& nums, int target) {
        int size = nums.size();
        if (size ==0){
            return -1; //在這裏進行一下邊界條件的判斷
        }
        int left =0;
        int right = size -1;//注意這裏不要在訪問的時候越界了喲

        while (left <=right){
            int mid =left + ( -left +right) /2;

            if(nums[mid] == target){
                return mid;
            } 
            //在這裏的一個解題思路爲 將這麼一串數據分爲兩個部分,那肯定是有一部分數據是有序的,另一部分是無序的                                                                                    
            if(nums[left] <=nums[mid]) {//如果左邊是有序的
               if(nums[left] <=target && target <=nums[mid]){ //目標在左半邊,一定要注意這裏中間值的判斷
                   right = mid -1;                            //nums[left],target,nums[mid] 三個數的大小
               } else{
                   left = mid +1;                                                     
               }
            } else{ //如果數據的右邊是有序排列的那麼
                if(nums[mid] <=target && target <=nums[right]){//目標在右半邊
                   left = mid +1;    
                }else{
                   right = mid -1;
                }

            }
        } 

        return -1; //如果沒有找到的話,返回 -1

//加油加油, Try to make yourself more excellent.
    }
};

 

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