《程式設計珠璣》程式碼之路12:如何用C/C++實現array[-1]並利用它寫出優美的程式碼
我們就以最大子陣列和為例:
最大子段和問題:給一組數,計算最大子段和。
在部落格:最大欄位和的6種解法,解法三中,我們提到了儲存前i項和的操作:
cache[i]代表前i-1項之和,因為在c/c++中,cache[-1]會越界,所以如果用cache[i]代表前i項和的話,那麼在用遞推公式計算低0項的時候,會特別尷尬。後續計運算元段和的時候,下標也是繞來繞去,一不小心就寫錯。。
那麼怎麼辦呢,這麼搞:
int cacheTemp[1000];
int *cache = cacheTemp + 1;
這時候cache[-1]就不會越界了:cahce[i]就可以代表前i項和,而不是前i-1項。
整個計算過程,就會變得特別容易思考:
程式碼如下:
int elegantCode(){
int ans = 0;
int cacheTemp[1000];
int *cache = cacheTemp + 1;
cache[-1] = 0;
for (int i = 0; i < nums.size(); ++i){
cache[i] = cache[i - 1] + nums[i];
}
for (int i = 0; i < nums.size(); ++i){
int sum = 0;
for (int j = i; j < nums.size(); ++j){
sum = cache[j] - cache[i - 1];
ans = max(ans, sum);
}
}
return ans;
}
相關文章
- 程式設計珠璣,字字珠璣程式設計
- 程式設計珠璣:續(程式設計珠璣.Ⅱ修訂版)程式設計
- 程式設計珠璣程式設計
- 如何寫出優美的 C 程式碼
- 《程式設計珠璣》程式碼之路15:節省空間的常見姿勢程式設計
- 《程式設計珠璣》程式碼之路13:陣列如何線上性時間內實現多次區間修改程式設計陣列
- 《程式設計珠璣》程式碼之路11:最大子陣列和問題,花式七種解法程式設計陣列
- 把《程式設計珠璣》讀薄程式設計
- 《程式設計珠璣》程式碼之路14:兩個不會演算法也能把效率提升4倍的小套路程式設計演算法
- 《程式設計珠璣》第二章-迴圈移位程式設計
- 《程式設計珠璣》第2章三個問題程式設計
- C++程式設計實現C++程式設計
- 寫程式碼如寫散文
- C++ web程式設計:寫出你的CGI程式C++Web程式設計
- Swift程式設計規範:保持程式碼優美的10個方法Swift程式設計
- 寫程式碼容易,程式設計並不容易程式設計
- 優化C++程式碼(2):C++程式碼的編譯過程優化C++編譯
- 《程式設計珠璣》第一章-點陣圖排序程式設計排序
- 優化C++程式碼(4):消除冗餘程式碼優化C++
- 寫程式碼如坐禪:你是哪一類程式設計師程式設計師
- 寫程式碼如坐禪:你是哪一類程式設計師?程式設計師
- C語言/C++程式設計學習:棧的程式碼實現之陣列方案C語言C++程式設計陣列
- 如何用 es6+ 寫出優雅的 js 程式碼JS
- 程式設計師如何寫出更好的程式碼程式設計師
- 分享C++寫後臺程式碼C++
- 實驗1 現代C++程式設計初體驗C++程式設計
- C++程式設計基礎實驗1C++程式設計
- c++程式碼優化總結C++優化
- 如何用低程式碼實現批次匯出PDF?
- c++ 泛型程式設計 之 自動生成程式碼C++泛型程式設計
- C 語言高效程式設計與程式碼優化程式設計優化
- 編寫高效的C程式與C程式碼優化C程式優化
- 如何用PYTHON程式碼寫出音樂Python
- 程式碼質量管理——如何寫出優雅的程式碼
- 優秀程式設計師寫可除錯的程式碼程式設計師除錯
- 如何用 SpringBoot 優雅的寫程式碼Spring Boot
- PyTorch最佳實踐,怎樣才能寫出一手風格優美的程式碼PyTorch
- 重構程式碼(應如寫詩)