leetcode 134. 加油站

2023.7.31

leetcode 134. 加油站_第1张图片

         这题直观思路是暴力法,用一个for循环遍历所有起点,判断哪个起点能走回来。 不过最后有几个很阴间的示例通过不了:

class Solution {
public:
    int canCompleteCircuit(vector& gas, vector& cost) {

        for(int i=0; i= cost[j])
                {
                    cur_gas =  cur_gas - cost[j];
                    j++;
                    n--;
                }
                else break;
            }
            if(n == 0) return i;
        }
        return -1;
    }
};

        会显示超时。  得使用一个时间复杂度更低的办法。
        下面是只遍历一次的思路:遍历所有起点,计算从当前加油站到下一个加油站旅行后的净汽油量保存至cur中,检查当前cur是否为负数。如果是负数,意味着无法从当前起点出发完成环形路线,在这种情况下进行以下操作:将ans变量置为i+1,即下一个潜在有效起点。将当前的cur值加到rest值当中。最后将cur值重置为0。完成循环后,检查currest的和是否大于等于0。如果是,意味着有足够的汽油从更新后的ans索引出发完成环形路线,因此返回ans的值。

        下面是代码实现:

class Solution {
public:
    int canCompleteCircuit(vector& gas, vector& cost) {
        int n = gas.size();
        int cur = 0; //当前油量
        int rest = 0; //记录当汽油不足时 不足的量
        int ans = 0; //起点
        for(int i=0; i= 0) return ans;
        else return -1;
    }
};

        还是有点抽象的,日后二刷。

你可能感兴趣的:(leetcode专栏,leetcode,算法,职场和发展,c++,数据结构)