zoukankan      html  css  js  c++  java
  • leetcode先刷_Search in Rotated Sorted Array II

    上一页下一页,找到相同的旋转阵列的问题。假设数组元素一再怎么办呢?会发生什么?

    我给大家举一个极端的例子。如果是这样的阵列中的元件。1,1,2,1,1,1,1,我们想看看这个数组2,刚开始A[middle]=1,发现超过target小,然后我们来看看A[0]和A[N],发现都跟A[middle]相等,那么这个2究竟在哪一半中?仅仅有上帝知道,如果他老人家真的存在的话。这种时候我们怎么办呢?没有其它的办法,仅仅能从头開始乖乖的扫描。直到发现target或者确定他不存在。

    为什么会出现这样的情况。或者说包括反复元素跟不包括反复元素在本质上有什么差别呢?这样的差别又是如何影响复杂度的呢?我认为差别在于,当A[middle]与两头的元素相等时,我们没法找到一半有序的元素,因此我们也就没法通过比較边界来确定target在不在这一半元素之中,也就是我们在每一轮的判定中,无法确定的扔掉一半元素,最坏情况下的复杂度自然就提高到了O(N)。

    编码上没有太大的差别,仅仅要当与两头元素都相等时,就仅仅移动左边的指针,逐个扫描过来,须要注意的是,每次移动时要判定这个值是否跟target的相等。

    class Solution {
    public:
        bool search(int A[], int n, int target) {
            int l = 0, r = n-1, mid;
            while(l<=r){
                mid = (l+r)/2;
                if(A[mid] == target)    return true;
                if(A[l]<A[mid]){
                    if(target>=A[l]&&target<A[mid])
                        r = mid-1;
                    else
                        l = mid+1;
                }else if(A[mid]<A[r]){
                    if(target>A[mid]&&target<=A[r])
                        l = mid+1;
                    else
                        r = mid-1;
                }else{
                    if(A[l] == target)  return true;
                    else    l++;
                }
            }
            return false;
        }
    };


    版权声明:本文博主原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    jsp转向
    什么是 XDoclet?
    tomcat中的几点配置说明
    mysql5问题
    POJ 3734 Blocks
    POJ 2409 Let it Bead
    HDU 1171 Big Event in HDU
    POJ 3046 Ant Counting
    HDU 2082 找单词
    POJ 1286 Necklace of Beads
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4759437.html
Copyright © 2011-2022 走看看