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)
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。
相關文章
- 問題總結
- Swoole 問題總結
- Elasticsearch 問題總結Elasticsearch
- Kibana 問題總結
- Kerberos問題總結ROS
- 跨域問題總結跨域
- springboot使用問題總結Spring Boot
- Fiddler 使用問題總結
- JBoss安全問題總結
- 面試問題總結面試
- electron初探問題總結
- 揹包問題例題總結
- 加油站問題(貪心演算法)演算法
- 前端跨域問題總結前端跨域
- ryu啟動問題總結
- flutter安裝問題總結Flutter
- vue專案問題總結Vue
- expdpnf 匯出問題總結
- mysql相關問題總結MySql
- Vue 常見問題總結Vue
- TCP常見問題總結TCP
- RabbitMq面試問題總結MQ面試
- PHP面試問題總結PHP面試
- REDIS面試問題總結Redis面試
- mysql常見問題總結MySql
- Kubernetes 常見問題總結
- Flink 常見問題總結
- 【Java問題面試總結】Java面試
- 揹包問題解題方法總結
- 回溯問題Python框架總結——排列組合問題Python框架
- Android 日常開發問題總結Android
- XCode 10 升級問題總結XCode
- javascript的物件問題及總結JavaScript物件
- 開發中常見問題總結
- vue2.0 + iview問題總結VueView
- 滑動視窗問題總結
- 陣列效能問題分析總結陣列
- 前端相容性問題總結前端