63 搜索旋转排序数组II 算法总结—二分搜索与旋转排序数组

原题网址:https://www.lintcode.com/problem/search-in-rotated-sorted-array-ii/description

描述

跟进“搜索旋转排序数组”,假如有重复元素又将如何?

是否会影响运行时间复杂度?

如何影响?

为何会影响?

写出一个函数判断给定的目标值是否出现在数组中。

您在真实的面试中是否遇到过这个题?  

样例

给出[3,4,4,5,7,0,1,2]和target=4,返回 true

标签
二分法
排序数组
数组
 
思路:方法与搜索排序数组类似,只是多了一个重复判断,如果 left 处元素与 mid 处元素相同,left~mid 部分的元素一定是相同的,可以直接跳过这部分去判断 mid+1 ,即 left++;
 
元素重复会影响时间复杂度,因为重复是无法折半查找,而是以距离1步进,时间复杂度会变大。
 
AC代码:
class Solution {
public:
    /**
     * @param A: an integer ratated sorted array and duplicates are allowed
     * @param target: An integer
     * @return: a boolean 
     */
    bool search(vector<int> &A, int target) {
        // write your code here
        if (A.empty())
    {
        return false;
    }
    int size=A.size();
    int left=0,right=size-1,mid;
    while(left<=right)
    {
        mid=(left+right)/2;
        if (A[mid]==target)
        {
            return true;
        }
        if (A[mid]>A[left]) 
        {
            if (A[left]<=target&&target<A[mid])
            {
                right=mid-1;
            }
            else
            {
                left=mid+1;
            }
        }
        else if (A[mid]<A[left])
            if (target>A[mid]&&target<=A[right])
            {
                left=mid+1;
            }
            else
            {
                right=mid-1;
            }
        }
        else//相等时顺序查找;
        {
            left++;
        }
    }
    return false;
    }
};

猜你喜欢

转载自www.cnblogs.com/Tang-tangt/p/9126892.html