クイックソート - 顔の質問オファーデジタルの半分以上39-配列オカレンスを安全性を証明するために、

/ * 
タイトル:
	配列は、回数を持っている数は、配列の半分以上の長さを表示され、この番号を見つけます。
	例えば、入力アレイ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。

}

   

おすすめ

転載: www.cnblogs.com/buaaZhhx/p/11979119.html