我有一個大小爲N的數組A.我有那裏整數S,E和I.我需要從索引S到E增加所有數組元素I. I增加一定數量的數組元素。 JAVA
S和E的值保證爲邏輯上是正確
我嘗試:
for(int i=S; i<=E; i++)
{
A[i]=A[i]+I;
}
有沒有更快的方式做?
我有一個大小爲N的數組A.我有那裏整數S,E和I.我需要從索引S到E增加所有數組元素I. I增加一定數量的數組元素。 JAVA
S和E的值保證爲邏輯上是正確
我嘗試:
for(int i=S; i<=E; i++)
{
A[i]=A[i]+I;
}
有沒有更快的方式做?
不,你的方法是正確的。你可以做A[i] += I
,但沒有任何改變,你可以通過「數量級」,以加快它
的JAVA是'A [i] + = I'真的比'A [i] = A [i] + I'快嗎? –
@ScaryWombat我認爲不是,我的猜測是底層字節代碼是相同的,至少在很多情況下。 –
@ScaryWombat可能不是。但我已經足夠老了,可以記住68K彙編,其中'++'編譯成特定的'INC'操作碼,比非'INC'版本快了幾個週期,所以稱之爲習慣;-) – John3136
你不保證沒有錯誤,如果S或E爲大於N.
我會做:
for (int i=S; i<=E && i<N; i++) {
A[i] += I;
}
此外,請確保您對S和E之間的元素感興趣,其中包含E(在結束循環的條件下討論=)。
除此之外,我認爲沒有更好的選擇,在更快的方面。
根據OP的評論 - 我們是否應該假設這些檢查正在完成 –
如果你這樣做,爲什麼你不檢查S是否大於零,或者A是否爲空。這通常不是一件正確的事情。如果一種方法具有明確的先決條件,則調用者必須尊重它們。如果調用者通過不尊重這些先決條件而得到異常,則調用者代碼應該被修復,而不是默默地接受無效的參數。 –
由我開始回答那些評論的時間沒有:)。 –
我假設你正在檢查'E'小於'A.length - 1' –
不,沒有,爲什麼你認爲這種方式是*慢*? – alfasin
「有沒有更快的方法來做同樣的事情?」不,這要快得多。 (正如John3136所說,使用'A [i] + = I' **可能會產生分數差異,但是您需要對其進行基準測試以找出答案。) –