【LeetCode】33. Search in Rotated Sorted Array 解题小结

题目:

Suppose a sorted array 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.

读入一个元素就将这个元素插入unordered_map里,然后判断是否在里面。

class Solution {
public:
    int search(vector<int>& nums, int target) {
        unordered_map<int, int> map;
        for(int i = 0; i < nums.size(); i++){
            map[nums[i]] = i;
            if(map.find(target)!=map.end()){
                return map[nums[i]];
            }
        }
        return -1;
    }
};

 后面看看提交情况,发现自己还是too young too simple,本题考查的还是二分法搜索。

class Solution 
{
public:
    int search(vector<int>& nums, int target)
    {
       int left = 0, right = nums.size()-1;
       while(left <= right)
       {
           int middle = left + ((right-left)>>1);
           if (nums[middle] == target) return middle;
           if (nums[middle] < nums[right])
           {
               if (nums[middle] < target && target <= nums[right])left = middle + 1;
               else  right = middle - 1;
           }
           else if (nums[middle] > nums[right])
           {
               if (nums[left] <= target && target < nums[middle])right = middle - 1;
               else left = middle + 1;
           }
           else  right--;
       }
       return -1;
    }
};

 

posted on 2016-08-27 10:43  医生工程师  阅读(129)  评论(0编辑  收藏  举报

导航