/ * タイトル: 配列は、回数を持っている数は、配列の半分以上の長さを表示され、この番号を見つけます。 例えば、入力アレイ9の長さは{1,2,3,2,2,2,5,4,2}。数2は5回、アレイ内のアレイの半分以上の長さ、出力2が表示されているので。0出力がある場合。 * / / * アイデア: 速い行に、最初のN / 2個の多数。 数は、全体の長さの半分を超えていることを確認します。 * / の#include <iostreamの> する#include <string.hの> する#include <stdio.hに> する#include <SET> の#include <ベクトル> 使用して名前空間STD; int型コア(ベクトル<整数>&番号、beginIndexパラメータINT、INT endIndexの、目標INT){ int型K = endIndexの、 INT =ヴァル番号[endIndexの]; (INT I = -endIndex 1; I> = beginIndexパラメータ; I - ){ IF(番号[I]> valが){ スワップ(番号[ I]、番号[K]); K--。 } MoreThanHalfNum_Solution INT(ベクトル<整数>番号){ もし(K ==ターゲット){ リターン番号[K]。 }そうであれば(K>ターゲット){ 戻りコア(番号、beginIndexパラメータ、K-1、ターゲット) } {他 戻りコア(番号、K + 1、endIndexの、ターゲット) } } ブールisTarget(ベクトル<整数>&番号、INT targetValue){ int型の時間= 0。 以下のために(; I <numbers.size(); INT iが0 = I ++){ (番号[I] == targetValue){もし 回++。 } } もし(時間* 2> numbers.size()){ trueを返します。 }他{ falseを返します。 } } もし(numbers.empty())戻り0; INTターゲット= numbers.size()/ 2。 INT targetValue =コア(数字、0、numbers.size() - 1、ターゲット) coutの<< targetValue <<てendl; (isTarget(数字、targetValue))であれば{ targetValueを返します。 }他{ 0を返します。 } } int型のmain(){ ベクトル<整数> A = {4,2,1,4,2,4}。 COUT << MoreThanHalfNum_Solution(A)<< ENDL。 }