2017-03-02 3 views
0

現在、私は比較のためにforループを実行するのと同じ古い方法を知っていますが、それを実行する方法がより効率的ですどちらの配列も長さがnなので、今はO(n)時に実行されています。1 int [] arrayのすべての値が別のint []配列よりも小さいか等しい場合、比較するためのエレガントな方法(簡潔かつ効率的)はありますか?

+0

「同じ古い方法で」、私はあなたが最大(O(n))と他の(O(n))の最小値を見つけてそれらの2つの値を比較することを意味すると思いますか? 2つの配列について何も分かっていない場合(ソートされていない場合)、そうでない場合は、それ以上に高速化することはできません。 2つのネストされたループを意味するなら、それは現在O(n)の時間に実行されていません。 – yshavit

+0

短くて効率的なものは同じものではありません。 'Arrays.stream(arrayA).max()。getAsInt();'はあなたのところでは短いですが、それでも内部ではループ内のすべてのメンバを検査するために内部的に使用されます。それでも、私はストリーミングを使用します。しかし、一方の配列が他の配列よりも大きいかどうかを知りたければ、2回ストリーミングするのではなく、自分のループを作成します。 – FredK

答えて

0

はい、配列の中の最大の整数が配列の最小整数よりも小さい場合、です。

あなたがYESの場合、第二の各値に最初の配列のすべての値を比較している場合は、場合、Java 8

int[] arrayA = ...; 
int max = Arrays.stream(arrayA).max().getAsInt(); 
int[] arrayB = ...; 
int min = Arrays.stream(arrayB).min().getAsInt(); 
+0

ソートせずに最高値と最低値を得ることができます。 – shmosel

+0

はい、私が間違っていなければ、Javaのソート方法はそれをO(n log(n))にします。 – bryancresswell

+0

@shmoselああ、Math.minとMath.maxはい? – bryancresswell

0

によってこれらの値を得ることができます。 2つの短いループを作成します.1つは最大1つの配列を取得し、もう1つは他の配列の最小値を取得してからこれらの値を比較します。同じ数の値が常に同じ場合、同じループ上で最大値と最小値の両方を取得することもできます。

+0

すごい!ありがとう! – bryancresswell

0

各要素の配列を比較する必要がある場合、それらをループする必要がある場合は、両方の配列がソートされている場合にのみO(n)をとります。ただし、O(n^2)は必要ありません。

関連する問題