まず、---会衆配列の番号を見つけます

サイズ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の INTB){
 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 }。

 

おすすめ

転載: www.cnblogs.com/pacino12134/p/10994411.html