単一の要素のバイナリ検索---秩序配列

単一の要素は、の配列を命じ

ソートされた配列中の単一の要素540(中)

Input: [1, 1, 2, 3, 3, 4, 4, 8, 8]
Output: 2

件名の説明:

  注文した配列は、この番号を見つけるために、2回表示されません唯一の番号を持っています。

アイデアの分析:

  溶液はXOR演算を解決するために、アレイを横断することができない、したがってO(LGN)の時間計算量を必要とし、時間複雑度はO(N)で行われます。

  インデックスがペアに元々存在する状態配列が切断され、インデックスの後、唯一の配列のインデックスの数として表示させます。mが偶数であり、m + 1 <指数、次いでNUMS [M] == NUM​​S [M + 1]であればM + 1> =指数、次いでNUMS [m]をある場合!= NUM​​S [M + 1]。

  法律上から知られているNUMS [m]の場合、NUMS [M] == NUM​​S [M + 1]であれば、インデックスは、[M + 2、H]で存在しています!= NUM​​S [M + 1]は、インデックスが[L、M]で存在します。代入式Hは、H = Mであるので、それが唯一のループ条件L <Hにこのフォームを使用することができます。

コード

public int singleNonDuplicate(int []nums){
    int l=0;
    int h=nums.length-1;
    while(l<h){
        int m=l+(h-l)/2;
        if(m%2==1)
            m--;   //保证l/h/m都在偶数位
        if(nums[m]==nums[m+1]){
            l=m+2;
        }else{
            h=m;
        }
    }
    return nums[l];
}

おすすめ

転載: www.cnblogs.com/yjxyy/p/11106696.html