Search in Rotated Sorted Array 题解

题目来源: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.

解题思路:

rotate总是至少有一半是有序的,可以根据这一半有序的值去二分。

    int search(int A[], int n, int target)
    {
        assert(n != 0);
        int left = 0; int right = n-1;
        while(left <= right)
        {
            int mid = left + ((right - left)>>1);
            if(A[mid] == target) return mid;
            if(A[left] <= A[mid])//left is sorted, left may equal mid
            {
                if(target >= A[left] && target < A[mid])//target in A[left,mid]
                    right = mid - 1;
                else
                    left = mid + 1;
            }else //right is sorted
            {
                if(target > A[mid] && target <= A[right]) //target in A[mid,right]
                    left = mid + 1;
                else
                    right = mid - 1;
            }
        }
        return -1;
    }

Last updated

Was this helpful?