33. Search in Rotated Sorted Array

題目描述:

Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.

(i.e., [0,1,2,4,5,6,7] might become [4,5,6,7,0,1,2]).

You are given a target value to search. If found in the array return its index, otherwise return -1.

You may assume no duplicate exists in the array.

Your algorithm's runtime complexity must be in the order of O(log n).

Example 1:

Input: nums = [4,5,6,7,0,1,2], target = 0
Output: 4

 代碼:

class Solution {
public:
    int search(vector<int>& nums, int target) {
        int l = 0, r = nums.size() - 1;
        while(l <= r){
            int mid = (l + r) / 2;
            if(nums[mid] == target) return mid;
            else if(nums[mid] > target){
                if(target > nums[nums.size() - 1] || nums[nums.size() - 1] > nums[0]) r = mid - 1; //target在左邊
                else{  //target在右邊
                    if(nums[mid] < nums[0]) r = mid - 1;  //mid在右邊
                    else l = mid + 1;                     //mid在左邊
                }
            }
            else if(nums[mid] < target){
                if(target <= nums[nums.size() - 1] || nums[nums.size() - 1] > nums[0]) l = mid + 1;  //target在右邊
                else{  //target在左邊
                    if(nums[mid] < nums[0]) r = mid - 1;  //mid在右邊
                    else l = mid + 1;                     //mid在左邊
                }
            }
        }
        return -1;
    }
};

兩次AC,本題是一個medium題目,中規中矩,由於要求時間複雜度爲O(log n),又是搜索,又是有序數列,所以自然而然是二分嘍。

靜心盡力!

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