2017-08-16 74 views
1

我有一個大小爲N的數組A.我有那裏整數S,E和I.我需要從索引S到E增加所有數組元素I. I增加一定數量的數組元素。 JAVA

S和E的值保證爲邏輯上是正確

我嘗試:

for(int i=S; i<=E; i++) 
{ 
A[i]=A[i]+I; 
} 

有沒有更快的方式做?

+0

我假設你正在檢查'E'小於'A.length - 1' –

+2

不,沒有,爲什麼你認爲這種方式是*慢*? – alfasin

+0

「有沒有更快的方法來做同樣的事情?」不,這要快得多。 (正如John3136所說,使用'A [i] + = I' **可能會產生分數差異,但是您需要對其進行基準測試以找出答案。) –

回答

1

不,你的方法是正確的。你可以做A[i] += I,但沒有任何改變,你可以通過「數量級」,以加快它

+0

的JAVA是'A [i] + = I'真的比'A [i] = A [i] + I'快嗎? –

+0

@ScaryWombat我認爲不是,我的猜測是底層字節代碼是相同的,至少在很多情況下。 –

+0

@ScaryWombat可能不是。但我已經足夠老了,可以記住68K彙編,其中'++'編譯成特定的'INC'操作碼,比非'INC'版本快了幾個週期,所以稱之爲習慣;-) – John3136

1

你不保證沒有錯誤,如果S或E爲大於N.

我會做:

for (int i=S; i<=E && i<N; i++) { 
    A[i] += I; 
} 

此外,請確保您對S和E之間的元素感興趣,其中包含E(在結束循環的條件下討論=)。

除此之外,我認爲沒有更好的選擇,在更快的方面。

+1

根據OP的評論 - 我們是否應該假設這些檢查正在完成 –

+1

如果你這樣做,爲什麼你不檢查S是否大於零,或者A是否爲空。這通常不是一件正確的事情。如果一種方法具有明確的先決條件,則調用者必須尊重它們。如果調用者通過不尊重這些先決條件而得到異常,則調用者代碼應該被修復,而不是默默地接受無效的參數。 –

+0

由我開始回答那些評論的時間沒有:)。 –