ワンダフルアルゴリズム[11] LeetCode-独自のアルゴリズムインタビューの質問の概要

  これは、ページアドレス上の特別な訓練プログラムLeetCodeです:https://leetcode-cn.com/explore/interview/card/top-interview-quesitons-in-2018/262/summery/

  全体的に、より体系的かつ包括的な。これらの問題に対処するには、私はいつも最初に学ぶために、他の多くの独創的なソリューションを見た後、再びコーディング、独自のメソッドを使用するようにしてください。

0、番組タイトルのウォームアップ

  0.1数は一度だけ表示されます

  整数の非空の配列を考えると、要素に加えて、一度だけ表示され、各要素の残りの部分は二回表示されます。要素のみに一度表示されていることを知るために。

パッケージcom.cnblogs.mufasa.QA1_makeAhotDOU; 

インポートorg.junit.Test;
 インポートjava.util.Arrays、

パブリック クラス解決法1 { 

    // 速度が、時間複雑度は約O(nlogn + N / 2)大丈夫ですされ 、 相対的なパフォーマンスであることが悪い
    公共 静的 INT singleNumber1(INT [] NUMS){ 
        は、Arrays.sort(NUMS); 
        INT LEN = -nums.length 1。;
         のためのINT I = 0; I <LEN; = I + 2 ){
             IF(NUMS [ !I]はNUMSは[Iは、+ = 1。]){
                 戻りI]が[NUMSを; 
            } 
        } 
        戻りNUMS [LENを]; 
    }

    // ***、時間複雑度は、O(N)最適化された溶液である
    公共の 静的 INT singleNumber(INT [] NUMS){
         int型の TEMP = NUMS [0 ;]
         のためにINT I = 1; IはNUMSに< .LENGTH; I ++ ){ 
            TEMP ^ = NUMS [I]; 
        } 
        戻りTEMP; 
    } 

    @Test 
    公共 ボイド試験(){
 //         NUMSのINT =新しい新しいINT [] [] {1,1,2,2,6,7 、7,6は}; 
        int型 [] = NUMS 新しい新規 のint [] {4,1,2,1,2 }; 
        のSystem.out.println(singleNumber(NUMS))。
        System.out.println(singleNumber1(NUMS))。
    } 
}

 

  0.2モードを求めて

  サイズを考えると  n個 の配列、それらのすべての番号を見つけます。モード回アレイに表示される数よりも多い  ⌊ n/2 ⌋ 要素。

  あなたは、配列が空であると仮定することができ、および会衆の指定された配列番号は常にあります。

以下のためのパッケージ変更com.cnblogs.mufasa.QA1_makeAhotDOU; 

インポートorg.junit.Test; 

インポートjava.util.Arrays;
 インポートjava.util.Map;
 インポートjava.util.TreeMapの、

パブリック クラス対処方法2 { 

    // 完璧なソリューション、時間複雑さは、O(NlogN)に還元することができる
    公共 のint majorityElement1(INT [] NUMS){ 
        は、Arrays.sort(NUMS); 
        戻り [nums.length / 2 NUMSを]; 
    } 

    // 発生の更新頻度のサイズ、ソートするためのTreeMapを使用して
    公衆 INT majorityElement(INT [] NUMS){ 
        TreeMapの <整数、整数> = TreeMapの新しい新TreeMapの<> ();
        以下のためにint型 i = 0; iはnums.length <; iは++ ){
             場合(!treeMap.get(NUMS [I])= NULL ){ 
                treeMap.put(NUMS [I]、treeMap.get(NUMS [i])と 1 ); 
            } { 
                treeMap.put(NUMS [i]が、 1 ); 
            } 
        } 
        int型の LOC = -1、最大値= 0 (のMap.Entry <整数、整数> KV:treeMap.entrySet()){
             場合(kv.getValue()> MAX){ 
                LOC = kv.getKey()。
                最大 = kv.getValue();
                もし(MAX> nums.length / 2 ){
                     ブレーク
                } 
            } 
        } 
        戻りLOCと、
    } 

    @Test 
    公共 ボイドテストは(){
         int型 [] NUMS = 新しい INT [] {2,2,1,1,1,2,2 }。
        System.out.println(majorityElement1(NUMS))。
        System.out.println(majorityElement(NUMS))。
    } 
}

 

  検索二次元マトリックスII 0.3

 

  0.4 2つの順序付けられた配列をマージ

 

  0.5エッグドロップ

  

1、文字列

  1.1回文を確認し、[書かれた 'VEの、比較的簡単]

  文字列を考えると、大文字小文字を無視することができる、唯一のアルファベットと数字を検討し、それが回文文字列であることを確認してください。

 

 

2、配列

3、ヒープ、スタック、キュー

4、リスト

5、ハッシュマップ

6、木

7、ソートおよび検索

8、動的プログラミング

9、グラフ理論

10、数学&ビットコンピューティング

11、アナログフェイス質問

 

おすすめ

転載: www.cnblogs.com/Mufasa/p/11563718.html