旋转有序数组

题目描述
给出一个转动过的有序数组,你事先不知道该数组转动了多少
(例如,0 1 2 4 5 6 7可能变为4 5 6 7 0 1 2).
在数组中搜索给出的目标值,如果能在数组中找到,返回它的索引,否则返回-1。
假设数组中不存在重复项。

示例1
输入
复制
[1],0
返回值
复制
-1
示例2

class Solution {
public:
    /**
     * 
     * @param A int整型一维数组 
     * @param n int A数组长度
     * @param target int整型 
     * @return int整型
     */
    int search(int* A, int n, int target) {
        // write code here
        int l=0,r = n-1,mid = 0;
        while (l<=r ) {
            mid = l+(r-l)/2;
            if (A[mid] == target) return mid;
            else if (A[mid]>=A[l]) {
                //mid >=l, 左侧一定有序
                if(A[l]<=target && A[mid]>target) r = mid-1;
                else l = mid+1;
                
            }else{
                //右侧一定有序
                if (A[r]>=target && A[mid]<target) l = mid+1;
                else r = mid-1;
                
            }
        }
        if(A[mid ]== target) return mid;
        return -1;
    }
};

原文地址:https://www.cnblogs.com/lyr-2000/p/14070375.html