プランを受賞 - 56の数字のソートされた配列を探します

タイトル説明

回数にソート配列に表示される数をカウントします。
 
ソリューション:
  最後のkを見つけるために戻って、二分法前進1の数kを検索し、Kを見つける使用し、のいくつかを知るために、K
  数nをkしかし、一旦、フォローヘッドトラバーサルを区別しなかったこの方法は、複雑さはO(N)の
  二分法を再利用することができ、一度kの左半分がもはやその右側の部分と同様に、最初に表示される場所のk個の二分法を見つけるために使用されていない見つけました。
  
1  クラスSolution01 {
 2  公共3      INT GetNumberOfK(ベクトル< 整数 >データ、int型K){
 4          もし(data.size()== 0戻り 0 ;
5          int型の L = 0、R = data.size() - 1 、M。
6          一方、(L <= R)
 7          {
 8              M =(R - L)/ 2 + L。
9              もし(データ[M] == k)をブレーク10              他の 場合(データ[M]> k)はR = M - 1 11               L = M + 1 12          }
 13          場合(L> R)戻り 0 ;
14          L = R = M。
15の         INTは RES = 0 16          一方(L> = 0 &&データ[L] == k)は{
 17の              RES ++。- L;
18          }
 19          ながら(R <data.size()&&データ[R] == k)は{
 20の              RES ++。++ R;
21          }
 22         返す RESを- 1 23      }
 24  }。
25  
26  クラスSolution02 {
 27  公共28      INT GetNumberOfK(ベクトル< 整数 >データ、int型K){
 29          であれば(data.size()== 0戻り 0 ;
30          int型 PM =検索(データ、0、data.size() - 1 、K)。
31          であれば(データ【PM] = K!)戻り 0 ;
32          INTピコリットル= PM、PR = ピコモル。
33          ながら(!ピコリットル= - 1個の &&データ[ピコリットル] == k)はピコリットル=検索(データ、0のPL - 1 、K)。
34          ながら(!PR = - 1 &&データ[PR] == k)は、PR =を見つける(データ、PR + 1、data.size() - 1 、k)を、
35          リターン(PR == - 1?data.size():PR) -ピコリットル- 1 36      }
 37      INT見つける(CONSTベクター< 整数、>データをint型の L、INT R、CONST  int型K)
 38      {
 39         int型 M = - 1 ;
40          一方(L> = 0 && R <data.size()&& L <= R)
 41          {
 42              M =(R - L)/ 2 + L。
43              であれば(データ[M] == k)を破ります44              他の 場合(データ[M]> k)はR = M - 1 45               L = M + 1 46          }
 47          リターンM。
48      }
 49 }。

 

おすすめ

転載: www.cnblogs.com/zzw1024/p/11706308.html