私はサイズNの配列Aを持っています。私は整数S、E、Iを持っています。インデックスSからEまでのすべての配列要素をIだけインクリメントする必要があります。配列の要素を特定の間隔で一定量増加させます。 Java
SとEの値は論理的に正しい
私の試み:
for(int i=S; i<=E; i++)
{
A[i]=A[i]+I;
}
同じことを行うためのより高速な方法はありますか?
私はサイズNの配列Aを持っています。私は整数S、E、Iを持っています。インデックスSからEまでのすべての配列要素をIだけインクリメントする必要があります。配列の要素を特定の間隔で一定量増加させます。 Java
SとEの値は論理的に正しい
私の試み:
for(int i=S; i<=E; i++)
{
A[i]=A[i]+I;
}
同じことを行うためのより高速な方法はありますか?
いいえ、あなたのアプローチは正しいです。あなたはA[i] += I
を行うことができますがSまたはEがNよりも大きい場合は、「桁違い」によってそれをスピードアップするためにあなたは何のエラーを確実にしないされていません
のJAVAは 'A [i] + = I'は本当に' A [i] = A [i] + I'よりも速いですか? –
@ ScaryWombat私はそうではないと思います。少なくとも、多くの場合、基になるバイトコードは同一であると思います。 –
@ScaryWombatはおそらくそうではありません。しかし、私は68Kアセンブリを覚えていて、 '++ 'がCでコンパイルされていて、' INC'バージョンよりも2サイクル早い特定の 'INC'オペコードにコンパイルされているので、それを習慣と呼んでいます;-) – John3136
を作ることができる変更はありません
私はどうしたら:
for (int i=S; i<=E && i<N; i++) {
A[i] += I;
}
Eが含まれているとまた、(ループを終了する条件に、=の話)、あなたはSとEの間の要素に関心を持っていることを確認してください。
それ以外にも、私はより速いという面では良い選択肢はありません。
OPのコメントによると、これらのチェックが行われていることを前提とします。 –
このようにすれば、Sが0より大きいか、Aがヌルでないことを確認してください。それは通常、正しいことではありません。メソッドが明確な前提条件を持っている場合、呼び出し側はメソッドを尊重する必要があります。呼び出し元がこれらの前提条件を守らずに例外を取得した場合、無効な引数を静かに受け入れるのではなく、呼び出し元コードを修正する必要があります。 –
私はこれらのコメントに答え始めた時点ではありません:)。 –
「E」が「A.length-1」よりも小さいことを確認していることを前提としています。 –
いいえ、そうではないと思うのはなぜですか? – alfasin
"同じことを行うより速い方法がありますか?"いいえ、それはそれが得られるほど速いです。 (John3136が言っているように、 'A [i] + = I' **を使用すると分数差が出るかもしれませんが、ベンチマークして調べる必要があります) –