Search in Rotated Sorted Array

来源:互联网 发布:ubuntu没有wifi列表 编辑:程序博客网 时间:2024/06/06 20:30

因为不允许有重复元素,a[l] <= a[m] 则可以判断出a[l,m]一定为递增序列,根据mid元素分开的两部分必定有一部分是单调的,另一部分可能非单调。时间O(nlogn),空间O(1)。

class Solution {public:    int search(int A[], int n, int target) {        if(n == 0) return -1;        if(n == 1) return A[0] == target?0:-1;                int start = 0, end = n;        while(start != end)        {            int mid = (start+end)/2;                        if(A[mid] == target) return mid;            if(A[start] <= A[mid])            {                if(A[start] <= target && target < A[mid])                    end = mid;                else                    start = mid+1;            }            else            {                if(A[mid] < target && target <= A[end-1])                    start = mid+1;                else                    end = mid;            }        }        return -1;    }};


最近的实现代码:

class Solution {public:    int search(int A[], int n, int target) {        int left = 0;        int right = n-1;        while(left <= right)        {            int mid = left + (right-left)/2;            if(A[mid] == target)            {                return mid;            }            if(A[left] <= A[mid])            {                if(A[left] <= target && target < A[mid])                    right = mid - 1;                else                    left = mid + 1;            }else            {                if(A[mid] < target && target <= A[right])                    left = mid + 1;                else                    right = mid - 1;            }        }        return -1;    }};
0 0
原创粉丝点击