letcode加油站問題總結
思路一
官方給的數學公式推導後的程式碼:
思路是:
我們首先檢查第 00 個加油站,並試圖判斷能否環繞一週;如果不能,就從第一個無法到達的加油站開始繼續檢查。
只需要選擇性的記憶上一次不能夠到達的位置,就可以化提升暴力的效果。
class Solution {
public:
int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
int n = gas.size();
int i = 0;
while (i < n) {
int sumOfGas = 0, sumOfCost = 0;
int cnt = 0;
while (cnt < n) {
int j = (i + cnt) % n;
sumOfGas += gas[j];
sumOfCost += cost[j];
if (sumOfCost > sumOfGas) {
break;
}
cnt++;
}
if (cnt == n) {
return i;
} else {
i = i + cnt + 1;
}
}
return -1;
}
};
作者:LeetCode-Solution
連結:https://leetcode-cn.com/problems/gas-station/solution/jia-you-zhan-by-leetcode-solution/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。
思路二
引用Wowudi老哥的原話,
“直觀地想到,字首和最低點的後一個點是最佳起點,以它為起點的後半段一定是能走通的,再保證全程有盈餘,就可以走完全程。”
java實現
public int canCompleteCircuit(int[] gas, int[] cost) {
int len = gas.length;
int spare = 0;
int minSpare = Integer.MAX_VALUE;
int minIndex = 0;
for (int i = 0; i < len; i++) {
spare += gas[i] - cost[i];
if (spare < minSpare) {
minSpare = spare;
minIndex = i;
}
}
return spare < 0 ? -1 : (minIndex + 1) % len;
}
作者:cyaycz
連結:https://leetcode-cn.com/problems/gas-station/solution/shi-yong-tu-de-si-xiang-fen-xi-gai-wen-ti-by-cyayc/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。
相關文章
- 問題總結
- Elasticsearch 問題總結Elasticsearch
- Swoole 問題總結
- Kerberos問題總結ROS
- 面試問題總結面試
- JBoss安全問題總結
- Kibana 問題總結
- electron初探問題總結
- PHP面試問題總結PHP面試
- REDIS面試問題總結Redis面試
- RabbitMq面試問題總結MQ面試
- 跨域問題總結跨域
- 機器學習問題方法總結機器學習
- 【Java問題面試總結】Java面試
- 常見問題總結
- 滑鼠定位問題總結
- 死鎖問題總結
- IIS配置問題總結
- Entity Framework問題總結Framework
- 加油站問題(貪心演算法)演算法
- 揹包問題例題總結
- vue專案問題總結Vue
- expdpnf 匯出問題總結
- 前端跨域問題總結前端跨域
- mysql常見問題總結MySql
- Vue 常見問題總結Vue
- mysql相關問題總結MySql
- TCP常見問題總結TCP
- ryu啟動問題總結
- flutter安裝問題總結Flutter
- JavaScript跨域問題總結JavaScript跨域
- 八皇后問題自我總結
- LNMP的403問題總結LNMP
- android textview問題總結AndroidTextView
- Oracle壞塊問題總結Oracle
- GeoServer 常見問題總結Server
- 壞塊問題(摘抄總結)
- 行列轉換問題總結