1つのタイトル説明
入力nは整数、最小の番号を見つけるK. 4,5,1,6,2,7,3,8例えば8つのデジタル入力、最小数は4 1,2,3,4です。
2つのアイデアや方法、C ++コアコード
2.1ソート()函数、ベクトル<整数>一back(); nlog(n)は
1 クラスソリューション{ 2 公共: 3 ベクトル< INT > GetLeastNumbers_Solution(ベクトル< INT >入力、int型K){ 4 ソート(input.begin()、input.end())。 5 ベクター< INT > 結果。 6 もし(K> input.size()) 7 戻り結果。 8 のためには、(int型 I = 0、I <K; iは++ ){ 9 result.push_back(入力[I])。 10 } 11 リターン結果; 12 } 13 }。
2.2パーティションパーティションO(N)
。1 クラスのソリューション{ 2 公共: 3 ベクトル< 整数 > GetLeastNumbers_Solution(ベクトル< 整数 > INPUT、int型のk){ 4。 // エラーまたはサイズkを確認する必要があります!!! 5 IF(input.size()== 0 || K> input.size()|| K <= 0 ) 6。 復帰ベクトル< 整数 > (); 7 。8 INT START = 0 ; 9 int型エンド= input.size () - 1 ; 10 int型のインデックス=パーティション(入力、開始、終了)。 11 一方(インデックス= K-!1 ){ 12 であれば(インデックス<K- 1 ){ 13 START =指数+ 1。 // k個の在インデックス右边 14 インデックス= パーティション(入力、開始、終了)。 15 } 16 他{ 17 端=索引- 1。 // k個の在インデックス左边 18 インデックス= パーティション(入力、開始、終了)。 19 } 20 } 21 ベクター< INT > RET; 22である ため(INT I = 0 ++; IはK < {I) 23が ret.push_back(INPUT [I]); 24 } 25 リターンRET; 26である } 27 28 INTパーティション(ベクトル< INT >データと、INTスタート、int型エンド){ 29 IF(スタート> エンド) 30 リターンスタート、 31は 32 INTキー= DATA [スタート]; // 第一の基準値をとる 33 一方 <(開始{端) 34 一方(データ[END] =キー&&開始<エンド)end--を> 。 35個の データ[スタート] = データ[END]。 36 一方(データ[開始] <=キー&&開始<エンド)開始++ 。 37個の データ[END] = データ[開始]。 38 } 39個の データ[スタート] = キー。 40 リターンを開始。 41 } 42 }。
参考資料
https://blog.csdn.net/zjwreal/article/details/88608506