leetcode1287(シンプル) - 要素の数の25%以上は、順序付けられたアレイに表示され

タイトル:順序付きリストを考えるには、1つのみの対象があることを確認するために、その要素の25%以上の出現回数を返します。

入力:ARR = [ 1226666710 ]
出力:6

分析:

方法の一つ:トラバース

時間計算量はO(N)であり、空間的な複雑さはO(1)であります

    INT findSpecialInteger(ベクトル< INT >&ARR){
         int型 LEN = arr.size()。
        INTのステップ= LEN / 4 以下のためにINT iが= 0 ; I +ステップ<LEN; I ++ 
        {
            もし(ARR [I] == ARR [I + ステップ]) 
                 戻りARR [I]。
        }
        リターン - 1 
    }

方法2:バイナリ検索

要求の対象、整数は、次に我々は結論付けることができ、図ARR = arr.length / 4 + 1アレイの少なくとも現れスパンの条件を満足する×:ARR、ARR ARRの配列要素[0]、ARR [スパン] [スパン* 2]、...となるxが含まれている必要があります。

連続スパンの数ので、スパンはの倍数でなければなりません。

我々はLOWER_BOUNDするには、いくつかの間隔のスパンとUPPER_BOUND見てみるので、出現回数を取得します。

    INT findSpecialInteger(ベクトル< INT >&ARR){
         int型 N = arr.size()。
        INTのステップ= N / 4 + 1 以下のためにINT iが= 0 ; I <N; I + = ステップ)
        {
            ベクター < INT > ::イテレータit_l = LOWER_BOUND(arr.begin()、arr.end()、ARR [I])。
            ベクター < INT > ::イテレータit_r = UPPER_BOUND(arr.begin()、arr.end()、ARR [I])。
            もし(it_r - it_l> = ステップ)
                 戻りARR [I]。
        }
        リターン - 1 
    }

一見時間複雑性はO(nlogn)です?

一見は、4個まで列挙要素が、時間複雑度は、O(LOGN)。

参考リンク:https://leetcode-cn.com/problems/element-appearing-more-than-25-in-sorted-array/solution/you-xu-shu-zu-zhong-chu-xian-ci-shu -chao-郭-25D-3 /

おすすめ

転載: www.cnblogs.com/lfri/p/12572135.html