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.

Subscribe to see which companies asked this question

1.做了下标映射

class Solution {
public:
    
    int binary_search(vector<int> &nums, int target) {
        int l = 0;
        int r = nums.size() -1;
        while (l<=r) {
            int mid = l + ((r - l) >> 1);
            if (nums[mid] == target) {
                return mid;
            } else if (nums[mid] < target) {
                l = mid + 1;
            } else {
                r = mid - 1;
            }
        }
        return -1;
    }
    int search(vector<int>& nums, int target) {
        //映射
        int i = 0;
        vector<int> tmp_nums;
        vector<int> tmp_index;
        int j = 0;
        for (i=0; i<nums.size() -1 ; i++) {
            if (nums[i+1] < nums[i]) {
                break;
            }
        }
        
        for (j=i+1; j<nums.size(); j++) {
            tmp_nums.push_back(nums[j]);
            tmp_index.push_back(j);
        }
        
        for (j=0; j<=i; j++) {
            tmp_nums.push_back(nums[j]);
            tmp_index.push_back(j);
        }
        
        int k = binary_search(tmp_nums, target);
        if (k != -1) {
            return tmp_index[k];
        } else {
            return -1;
        }
    }
};
原文地址:https://www.cnblogs.com/SpeakSoftlyLove/p/5184339.html