您的位置:首页 > 其它

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;

}

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: