安全offer29を証明:最小数k

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

 

おすすめ

転載: www.cnblogs.com/wxwhnu/p/11415890.html