leetcode Gas Station
2013-11-27 22:51
337 查看
假设[i,j],从i出发,sum(gas[i]-cost[i],...gas[j]-cost[j]) < 0 那么选择j+1作为下一个尝试点,而不是[i+1,j]
证明:k >= i+1 && k <= j
假设把k作为出发点,那么sum(gas[k]-cost[k],...,gas[j]-cost[j]) >= 0,由于sum(gas[i]-cost[i],...gas[j]-cost[j]) < 0
那么sum(gas[i]-cost[i],...,gas[k-1]-cost[k-1]) < 0,这和 sum(gas[i]-cost[i],...,gas[k-1]-cost[k-1]) > 0 矛盾
得证.
class Solution {
public:
int canCompleteCircuit(vector<int> &gas, vector<int> &cost) {
// Note: The Solution object is instantiated only once and is reused by each test case.
int sum = 0;
int total = 0;
int start = 0;
int n = gas.size();
for(int i = 0;i < n;i++){
sum += gas[i] - cost[i]j;
total += gas[i] - cost[i];
if(sum < 0){
start = (i + 1)%n;
sum = 0;
}
}
return total >= 0 ? start:-1;
}
};
证明:k >= i+1 && k <= j
假设把k作为出发点,那么sum(gas[k]-cost[k],...,gas[j]-cost[j]) >= 0,由于sum(gas[i]-cost[i],...gas[j]-cost[j]) < 0
那么sum(gas[i]-cost[i],...,gas[k-1]-cost[k-1]) < 0,这和 sum(gas[i]-cost[i],...,gas[k-1]-cost[k-1]) > 0 矛盾
得证.
class Solution {
public:
int canCompleteCircuit(vector<int> &gas, vector<int> &cost) {
// Note: The Solution object is instantiated only once and is reused by each test case.
int sum = 0;
int total = 0;
int start = 0;
int n = gas.size();
for(int i = 0;i < n;i++){
sum += gas[i] - cost[i]j;
total += gas[i] - cost[i];
if(sum < 0){
start = (i + 1)%n;
sum = 0;
}
}
return total >= 0 ? start:-1;
}
};
相关文章推荐
- LeetCode(134) Gas Station
- 【Leetcode】Gas Station #134
- LeetCode Gas Station
- [LeetCode]Gas Station
- LeetCode Gas Station
- [leetcode] Gas Station
- [leetcode]Gas Station
- 114_leetcode_Gas Station
- leetcode 134: Gas Station
- LeetCode - Gas Station
- LeetCode-Gas Station(加油站问题)
- leetcode -day9 Candy & Gas Station & Binary Tree Maximum Path Sum
- LeetCode-134. Gas Station(JAVA)加气站问题
- 【Leetcode】Gas Station
- 【leetcode】Gas Station
- Leetcode: gas-station
- Leetcode之Gas Station
- leetcode第17题(gas_station)
- [Leetcode][python]Gas Station
- leetcode || 134、Gas Station