《程式設計珠璣》程式碼之路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;
}
相關文章
- 《程式設計珠璣》程式碼之路15:節省空間的常見姿勢程式設計
- 《程式設計珠璣》程式碼之路13:陣列如何線上性時間內實現多次區間修改程式設計陣列
- 《程式設計珠璣》程式碼之路11:最大子陣列和問題,花式七種解法程式設計陣列
- C++程式設計實現C++程式設計
- 《程式設計珠璣》程式碼之路14:兩個不會演算法也能把效率提升4倍的小套路程式設計演算法
- C語言/C++程式設計學習:棧的程式碼實現之陣列方案C語言C++程式設計陣列
- 如何用 SpringBoot 優雅的寫程式碼Spring Boot
- C++程式設計基礎實驗1C++程式設計
- 如何用 es6+ 寫出優雅的 js 程式碼JS
- 實驗1 現代C++程式設計初體驗C++程式設計
- 如何用低程式碼實現批次匯出PDF?
- PyTorch最佳實踐,怎樣才能寫出一手風格優美的程式碼PyTorch
- 如何寫出優雅的程式碼?
- 寫出優雅的js程式碼JS
- 程式設計師如何寫出好程式碼?程式設計師
- 好程式設計師不寫程式碼程式設計師
- 好程式設計師寫出來的程式碼,就叫好程式碼嗎?你錯了!程式設計師
- 阿里如何用 AI 寫程式碼?阿里AI
- 重構程式碼(應如寫詩)
- extern "C"的用途—在C++程式碼中嵌入C程式碼C++C程式
- socket程式設計實現tcp伺服器_C/C++程式設計TCP伺服器C++
- 自動現代化C++程式碼C++
- 當程式設計師寫不出程式碼了……程式設計師
- C++實現管理系統的示例程式碼C++
- 程式碼如人
- 如何寫出更優質的程式碼
- C++ concurrency::task實現非同步程式設計(WindowsC++非同步程式設計Windows
- C++核心程式設計C++程式設計
- c#程式碼優化總結1C#優化
- 老程式設計師的10個程式設計小技巧,教你寫出高質量程式碼!程式設計師
- c/c++程式碼流程圖生成C++流程圖
- 這些資深程式設計師的程式設計小技巧,教你寫出高質量程式碼!程式設計師
- 現代c++與模板超程式設計C++程式設計
- Gitee Webhook 實現自動拉取程式碼並編譯程式碼GiteeWebHook編譯
- 如何寫出優雅耐看的JavaScript程式碼JavaScript
- Java程式碼編寫、程式碼優化技巧總結Java優化
- Windows 程式設計簡介從C/C++到Windows程式設計Windows程式設計C++
- 如何優雅的在業務中使用設計模式(程式碼如詩)設計模式