そのような数が存在する場合、数N / 2より大きい数の他の出現の数の合計よりも大きい回数の発生次いで数を議論するように見えます。
配列Aには、我々は、データA1、A2の2セットを定義します。A1は、多数の発生のセット数がより大きいN / 2であり、組成物の残りの設定A2の数です。アレイの場合
等しくBではないと仮定要素、bは、2つのケースが、すなわち、ある:A1の一部は、BはA2に属し、属するA2、A2属するbは。両方の場合において、等
A、BはアレイAから削除された場合、設定されたサイズは、依然としてA1とA2よりも大きくなっています。この考え方によると、私たちは、次のコードを持っています:
INT 、M; int型の COUNT = 0 ; のための(自動NUM:NUMS) {
//最初の時間に1 IF(0 == COUNT) { M = NUM; ++ COUNT; } 他 {
//我々が等しくないを追加する場合等しい、除去しながら IF(M == NUM)を ++ COUNT; そう - COUNT; }
}
次いで1/3よりも大きい回数を見つけ、我々は2点のそのような数N、Mの最大値を提示します。あるいはn mの比及び1のいずれかである残りの部分:1/2のためのコンバージョンの数よりも大きい1、。コードは以下の通りであります:
int型 M、N; // 第三の要素よりも最大2倍以上の存在が表示され INT CM&LT、CN; //はmに対応し、nは統計的である ため(自動NUM:NUMS){ IF(CM&LT == 0 || NUM = = M){ M = NUM; ++ CM< } そう IF(CN == 0 || NUMの== N-){ N- = NUM; ++ CN; } 他{ - CM< - CN; } }
単にデータセットのサイズに対応する第三の状態よりも大きいM、番号を削除するために、nは、番号を削除するように設定された各データに対応するm、nはデータのその部分の決して1/3以上あるかのように理解することができますそれは変更されません。