LeetCode 134. Gas Station

183 篇文章 2 订阅
3 篇文章 0 订阅

初始化起始车站begin和抵达车站end为0, 初始化记录车上还剩的汽油gas_in_car为0,迭代gas.size()次。每次迭代:

计算当前所在车站gas[now] - gas[cost], 将差值加入gas_in_car中

1) 当gas_in_car小于0时,说明无法从begin抵达end, 将begin前移(-- begin), 继续迭代

2) 当gas_in_car大于0时,说明可以从begin抵达end, 将end后移(++ end), 继续迭代


迭代gas.size()次后,无论怎样,我们已经把所有车站迭代完了,由于测试样例保证唯一解,所以最终

1) 要么我们已经找到了begin, 使得gas_in_car大于等于0

2) 要么经过gas.size()次迭代后得到的gas_in_car小于0, 此时返回-1即可。


代码:

class Solution 
{
public:
    int canCompleteCircuit(vector<int> &gas, vector<int> &cost) 
    {
    	int gas_in_car = 0;
    	int begin = 0;

    	for (int now=0, end=0, station_cnt=0; station_cnt < gas.size(); ++ station_cnt)
    	{
    		gas_in_car = gas_in_car + gas[now] - cost[now];
    		if (gas_in_car < 0) // backward
    		{
    			-- begin;
    			begin = begin<0? gas.size()-1: begin;
    			now = begin;
    		} else // forward
    		{
    			++ end;
    			now = end;
    		}
    	}

    	return gas_in_car>=0? begin: -1;
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值