leetcode - Gas Station

来源:互联网 发布:阿里云大数据开发平台 编辑:程序博客网 时间:2024/05/18 00:01

思路:

  • 尝试从每一个位置遍历一圈,跳过无效点

难点:

  • 无效点的判断

分析:

  • 如果 step != gas.size(),也就是说从当前的 start 位置开始没有转一圈:
  • 首先对于 [start, start + step - 1] 之中的所有位置 pos,都有 left_gas[pos] >= 0
  • 从 [start, start + step] 之中的任何点出发,都无法穿越 (start+step, start+step+1)
  • 因此需要跳过其间所有点,从start + step + 1 开始重新尝试遍历

代码:

int canCompleteCircuit(vector<int> &gas, vector<int> &cost) {    for (int start = 0; start < gas.size();) {        int left_gas = 0;        int step = 0;        for (; step < gas.size(); ++step) {            int cur_pos = (start + step) % gas.size();            left_gas += gas[cur_pos] - cost[cur_pos];            if (left_gas < 0) break;        }           if (step == gas.size()) return start;        start += step + 1;    }       return -1; }

参考文献:

[1] http: //blog.csdn.net/kenden23/article/details/14106137

0 0