码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode|81|Search in Rotated Sorted Array II

时间:2015-02-04 13:08:15      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:leetcode   二分查找   search   

题目:与33题类似,也是在被翻转的有序数组中查找元素。不同的是数组中可能有重复的元素出现。

分析:数组中的元素可以重复导致的问题就是如果first小于等于mid,那么前半部分也不一定是有序的,例如[1 3 1 1 1 1 1 ]。因此我们把判断条件进一步细分,分为三种情况,大于,小于和等于。等于的时候直接first++就可以了。

代码:

class Solution {
public:
    bool search(int A[], int n, int target) {
        int first=0;
        int last=n;
        while(first!=last){
            const int mid=first+(last-first)/2;
            if(A[mid]==target) 
            return true;
            if(A[first]<A[mid]){
                if(A[first]<=target&&target<A[mid])
                last=mid;
                else
                first=mid+1;
            }
            else if(A[first]>A[mid]){
                if(A[mid]<target&&target<=A[last-1])
                first=mid+1;
                else
                last=mid;
            }
            else first++;
        }
        return false;
        
    }
};
该算法的时间复杂度为O(log n),空间复杂度为O(1)。


leetcode|81|Search in Rotated Sorted Array II

标签:leetcode   二分查找   search   

原文地址:http://blog.csdn.net/dainiwan/article/details/43483189

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!