サイズnの配列を指定して、それらの数は、会衆を見つけます。モードは、より⌊N / 2⌋要素大きいアレイにおける出現数を指します。
あなたは、配列が空であると仮定することができ、および会衆の指定された配列番号は常にあります。
例1:
入力:[3,2,3]
出力:3
例2:
入力:[2,2,1,1,1,2,2]
出力:2
注:モードは、そのユニークな番号の数の少数派、会衆の数に少なくとも1秒よりも、より多くの意味常にあります。
方法1:
まず、ソート、その数はモードの途中で確かにあります
1 クラスソリューション{ 2 公共: 3。 静的 BOOL CMP(CONSTの INT&A、CONSTの INT&B){ 4。 復帰 A < B; 5。 } 6。 INT majorityElement(ベクトル< INT >&NUMS){ 7。 ソート(nums.begin( )、nums.end()、CMP); // 実際にCMP、デフォルトの昇順ソートを書いてはいけません。昇順:<整数>()以下;降順:大<整数>() 。8 戻り NUMSを[nums.size()/ 2 ]; 9 } 10 }。
方法2:ムーア投票法
コンテナの実装をスタック:
1 クラスソリューション{ 2 公共: 3 INT majorityElement(ベクトル< INT >&NUMS){ 4 スタック< INT > my_stack。 5 my_stack.push(NUMS [ 0 ])。 6 用(int型 i = 1 ; iがnums.sizeを()<Iは++ ){ 7 場合(my_stack.empty()|| my_stack.top()== NUMS [I]){ 8 my_stack.push(NUMS [Iを]); 9 } 10 他{ 11 my_stack.pop(); 12 } 13 } 14 リターンmy_stack.top()。 15 } 16 }。
アルゴリズム:
1 クラスソリューション{ 2 公共: 3 INT majorityElement(ベクトル< INT >&NUMS){ 4つの INTのRES =のNUMS [ 0 ]。 5 int型のカウント= 1 ; 6 のためには、(int型 i = 1 ; iが(nums.sizeを<); iが++ ) 7 { 8 た場合(RESが== NUMS [I]) 9 カウント++ 。 10 他の 11 { 12 count-- 。 13は IF(COUNTが== 0 ) 14の RES NUMS = [I +は1 ]; //すべての数は確かに存在するため、= 0カウントので、存在しなければならない1 + I。 15 } 16 } 17の。 リターンRESを、 18である } 19 }。