最初のマシンのテストレポートの最初のアルゴリズム
Panjun林丁リリ
7-1バイナリ検索:nの値(1 <= N <= 1000 )、N 見つける非下降整数の順序及びXの数、使用してバイナリ検索アルゴリズム Xを見つけるために、添え字(0〜n個の出力X -1)と比較の数。xが存在しない場合は、出力1と比較の数。入力フォーマット:
入力コモン三行:最初の行nの値であり、nは整数第二線である第三の線はx値です。
出力フォーマット:
ここで、添字x出力(0〜N-1)との比較の数。xが存在しない場合は、出力1と比較の数。
サンプル入力:
4
1 2 3 4
1
出力例:
0
2
問題解決のアイデア:このタイトルは最も重要なバイナリ検索です。私たちは、再帰関数を使用して、書籍のアルゴリズムを使用し始め、いくつかの質問がありました。問題の主な機能は、それが再帰関数で見られた、大きすぎではありません。質問のうちのn-1の代わりに始まり、とき再帰アルゴリズムを逃れるために、不可能を存在しない番号を見つけることです。これは、より単純であるように、反復的な他の機能に切り替えます。第二に、重要なポイントはカウントされます。追加回数のループの外++。
インポートjava.util.Scanner;
輸入静的java.util.Arrays.sort。
パブリッククラスメイン{
静的なint型のカウント= 0;
パブリックstatic int型biSearch(INT []、左INT、INT右、int型X)
{
一方(左<=右)
{
int型半ば=(左+右)/ 2;
IF([中間] == x)は
{
++数えます。
半ばを返します。
}
IF([中間] <X)
{
++数えます。
左=ミッド+ 1;
}
IF([中間]> X)
{
++数えます。
右=半ば - 1。
}
}
-1を返します。
}
パブリック静的無効メイン(文字列[] args){
スキャナ入力=新しいスキャナ(System.in)。
INT、N = input.nextInt()。
INT [] =新しいINT [N]。
以下のために(INT i = 0; iがn <; iは++)
[I] = input.nextInt()。
INT X = input.nextInt()。
System.out.println(biSearch(0、N - 1、X))。
System.out.print(カウント)。
}
}
7-2は、バイナリサーチアルゴリズムを書き換えます
[0:N-1]が設定され、良好な配列を有し、書き換えアレイの行であるバイナリサーチアルゴリズムを xが配列されていないとき、xの最大の要素の位置を返すようにすることは、私未満、位置の最小のJ Xの要素よりも大きいです。配列の要素を探し、iとjと同じ、両方の配列の位置x。
入力フォーマット:
2行を入力します。
最初の行は、n及びxの値であり、2行目は、それぞれ整数との間のスペースで区切られたn個の異なる整数、非降順です。
出力フォーマット:
添字jは最小X最大出力要素iはxの最小の要素よりも大きい最大屈折率よりも小さいです。配列の要素を検索する場合、i、jは同じ。ヒント:Xは、出力がフル値未満の場合:-1 0、xはすべての値よりも大きい場合、出力:N-1の値は、n個
サンプル入力:
ここでは、入力のセットを与えられています。例えば:
6 5
2 4 6 8 10 12
出力例:
出力に対応し、ここで考えます。例えば:
1 2
問題解決のアイデア:検索要素で、この質問の最初の半分は、最初のタイトルの戦いのコードに従うことができます。この問題はポイントが必要です。時間のこの数は、アレイに見出すことができる場合、アレイは、時間的に見つけることができません。もっと状況が存在しない場合に留意すべきです。タイトルは、特定のために必要とされる、決定された数が最大要素位置よりも小さいと決定された数が最小エレメントの位置よりも大きい場合、対象が必要とされる場合は存在しない、隣接した位置です。問題我々アレイが範囲外に存在する、請求項問題が間違ったテーブルの範囲内にある定義され、N = 10、操作11で使用しました。
インポートjava.util.Scanner;
輸入静的java.util.Arrays.sort。
パブリッククラスメイン{
パブリック静的無効メイン(文字列[] args){
int型の最大= 0;
スキャナ入力=新しいスキャナ(System.in)。
INT、N = input.nextInt()。
INT X = input.nextInt()。
INT [] =新しいINT [N]。
以下のために(INT i = 0; iがn <; iは++)
[I] = input.nextInt()。
; 0 =左のint 右int型= N-1;
一方(左<=右)
{
int型半ば=(左+右)/ 2;
IF([中間] == x)は
{
System.out.println(ミッド+ "" +中旬)。
ブレーク;
}
IF([中間] <X)
{
左=ミッド+ 1;
}
IF([中間]> X)
{
右=半ば - 1。
}
}
以下のために(INT i = 1; iがn <; iは++)
{
もし([I]!= x)は、
{
IF(X <[I] && X> [I-1])
{
最大= I;
System.out.print((MAX-1)+ "" +最大)。
}
}
}
IF(X <[0])
System.out.print(-1 + "" + 0)。
IF(X> [N-1])
System.out.print(N-1 + "" + N)。
}
}
中央7-3 2命じたシーケンス
二つの既知の非等長降順シーケンスS1、S2、S1およびS2機能評価の設計と設定中央値があります。順序付けられたシーケンス0、1、⋯、中央値A N-1は、A(N-1)の値を指す/ 2、すなわち、第一⌊(N + 1 )/2⌋数(0は数1です)。
入力フォーマット:
3行を入力します。最初の行は、N非整数の降順で、すなわち、行当たりの情報のシーケンスが続く共通の長さN(0 <N≤100000)のシーケンスを与えます。スペースでデジタル間隔。
出力フォーマット:
行のシーケンスビットのセット二入出力配列。
サンプル入力1:
5
1 3 5 7 9
2 3 4 5 6
出力サンプル1:
4
サンプル入力2:
6
-100 -10 1 1 1 1
-50 0 1 2 3 4 5
出力サンプル2:
1
インポートjava.util.Scanner;
パブリッククラスメイン{
パブリックstatic int型の統合が(INT [] A1、INT [] A2){
int型I = 0、J = 0、K = 0;
int型N;
INT []統合=新しいint型[a1.length + a2.length]。
{(私がj <a2.length && a1.length <)しながら
IF(A1 [I] <= A2 [J]){
積分[K] = a1の[I]。
I ++;
K ++;
}他{
積分[K] = A2 [J]。
K ++;
J ++;
}
}
IF(I == a1.length){
用(; J <a2.length; J ++、K ++)
積分[K] = A2 [J]。
}
IF(jは==のa2.length){
(; iはa1.lengthを<; iは、kは++ ++)のために
積分[K] = a2の[I]。
}
リターンN =積分[(K-1)/ 2]。
}
パブリック静的無効メイン(文字列[] args){
スキャナ入力=新しいスキャナ(System.in)。
INT、N = input.nextInt()。
INT [] A1 =新しいINT [N]。
INT [] A2 =新しいINT [N]。
以下のために(INT i = 0; iがn <; iは++)
A1 [I] = input.nextInt()。
以下のために(INT i = 0; iがn <; iは++)
A2 [I] = input.nextInt()。
=統合(A1、A2)のint;
System.out.println(A)。
}
}