トピック1:回数数ソート配列の中に表示されていること
方法:その番号を見つけるためにバイナリ検索を使用して、約統計拡大
方法2を:それぞれのバイナリ検索は、最初と最後のk Kを見つけ、その後、減算します
静的 INT findk(INT []、INT K){ もし、(A == NULL || a.length <1)戻り 0 ; INT = 0なります。 INT端= a.length-1 。 int型 I1 = -1 ; int型間; 一方、(BE <= 端){ インター 1 =(+端である)>> 。 もし([インター] < K) である = + 1インター。 それ以外の 場合([インター]> k)の 端 =インター1 。 他{ 場合(インター== 0 || [インター1] < K){ I1 = インター。 休憩; } 他の 端 =インター1 。 } } もし(I1 == - 1)戻り 0 ; こと = I1; 端 = a.length-1 。 int型I2 = -1 ; 一方、(BE <= 端){ インター 1 =(+端である)>> 。 もし([インター] < K) である = + 1インター。 他の 場合([インター]> k)の 端 =インター1 。 他{ 場合(インター== a.length-1 || [インター+ 1]> K) { I2 = インター。 休憩; } 他に も = + 1間; } } もし(I2> = I1) リターン I2-I1 + 1 。 リターン 0 ; }
タイトル2:0-n-1の欠失素子
n-1の一意の数値範囲Nデジタル一方の0〜N-1と配列からわずか1桁以内の配列番号で昇順に長さデジタル見つける
方法:バイナリサーチを直接使用し、値の添え字が等しい場合、値はインデックスよりも大きい桁である場合、それは左側にそうでない場合は、現在の標準の下でインデックス戻りに等しい値にそれをです
1つの 静的 INT GetmissNumber(INT []){ 2 であれば(A == NULL || a.length <1)戻り 0 ; 図3は、 INT = 0です。 4 INT端= a.length-1 。 5 INT <U> I1 </ U> = - 1 。 6 int型の間; 7 一方(BE <= 端){ 8 インター=(+端である)>> 1 。 9 もし([インター] == 間) 10 BE =インター+ 1 。 11 他{ 12 であれば(インター== 0 ||([インター]>間&& [インター1] ==間-1 )) 13 リターンインター。 14 端=インター1 。 15 } 16 } 17 リターン -1 。 18 }
タイトルIII:同じ要素値インデックスを探す
方法:バイナリサーチを、インデックスは、インデックスが少ない左側の値未満である場合、右は、見つけることができないこと-1値よりも大きい場合