私は未知のサイズの配列を持っています、私は奇数の数字しか持っていないことを知っています。
私は最初の半分かどうかを確認する必要があります配列は中心値(最大値)に向かって漸進的に成長し、中心値の後では数値の値は徐々に小さくなる。
私は最善の方法は、配列の長さを分割することだと思ったが、それは奇数なので、配列に0.5を追加する必要がありますが、これは可能ではないようです。
int N = Integer.parseInt(args[0]);
int[] array = new int[N];
int x = array.length;
//split into new arrays
int[] a = new int [x/2];
int[] b = new int [x/2];
if(a<b && b<c){
System.out.println("Has a peak");
} else {
System.out.println("Doesnt have a peak");
}
回答:
回答№1は0中心値は、その1つに含める必要はありません子配列オリジナルがN = 11なら、あなたは物事を5-1-5と分けることができます。しかし、Bob Brinksのコメントによれば、実際には別々の配列を作成する必要はなく、適切なインデックスにはintを使用し、配列自体をループして各セルがルールに従うことを確認するだけです。ループの前に "ok"というブール値をtrueに設定し、配列インデックスがテストに失敗した場合はfalseに設定します。
中央のセルは常に配列[N / 2](N / 2常に切り捨てられます)。配列[1]から配列[N / 2]までの各セルを確認し、それぞれが以前のものよりも大きいかどうか確認することができます。配列[N / 2 + 1]から配列[N-1]までの各セルを調べて、それらのそれぞれが前の配列よりも小さいかどうかを確認する2番目のループがあります。ループの後で、 "ok"がまだ真であるかどうかがわかります。その場合、セルのどれもがルールを破っていません。
目を向けるべき主なものは、セルのインデックスをループごとに取得し、正しい順序(開始点と終了点)ですべてトリガーされていることを確認します。そうでない場合は、FORループをどのように記述したかに問題があります。行内の等しい値が許されます。比較チェックのために> =と<=を使用してください。プログラムのデバッグバージョンでは、配列の長さ、ループインデックスなどを出力します。基本的には、どのような値でも識別できます。 「ここで問題がある」ことに気付き、すべてのプログラム構造がどのように機能するかを学びます。
回答№2の場合は0
この機能を試してください。パラメータとして配列をとり返します。 true
配列にピークが含まれていれば(あなたの説明によると)、 false
もし存在しなければ -
public static boolean isPeak(int[] array){
int length = array.length;
int prev=array[0];
for(int index=1;index<length;index++){
if(index<length/2+1){
if(array[index] < prev){
return false;
} else {prev=array[index];}
} else {
if(array[index] > prev){
return false;
} else {prev=array[index];}
}
}
return true;
}