列表

详情


NC235. 加油站

描述

在一条环路上有 n 个加油站,其中第 i 个加油站有 gas[i] 升油,假设汽车油箱容量无限,从第 i 个加油站驶往第 (i+1)%n 个加油站需要花费 cost[i] 升油。

请问能否绕环路行驶一周,如果可以则返回出发的加油站编号,如果不能,则返回 -1。
题目数据可以保证最多有一个答案。

数据范围: , gas 和 cost 数组中的值满足

示例1

输入:

[1,2,3,4,5],[3,4,5,1,2]

输出:

3

说明:

只能从下标为 3 的加油站开始完成 (即第四个加油站)

示例2

输入:

[0,10],[9,1]

输出:

1

示例3

输入:

[2,3,4],[3,4,5]

输出:

-1

说明:

无论从哪个加油站出发都无法环绕环道一圈

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 14ms, 内存消耗: 3724KB, 提交时间: 2022-06-08

static const auto io_sync_off = [](){
    std::ios::sync_with_stdio(false);
    std::cout.tie(nullptr);
    std::cin.tie(nullptr);
    return nullptr;
}();
class Solution {
public:
    int gasStation(vector<int>& gas, vector<int>& cost) {
        int curSum=0;
        int min=INT_MAX;
        for(int i=0;i<gas.size();i++)
        {
            int rest=gas[i]-cost[i];
            curSum+=rest;
            if(curSum<min)
                min=curSum;
        }
        if(curSum<0)
            return -1;
        if(min>=0)
            return 0;
        for(int i=gas.size()-1;i>=0;i--)
        {
            int rest=gas[i]-cost[i];
            min+=rest;
            if(min>=0)
                return i;
        }
        return -1;
    }
};

C++ 解法, 执行用时: 18ms, 内存消耗: 4308KB, 提交时间: 2022-01-22

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param gas int整型vector 
     * @param cost int整型vector 
     * @return int整型
     */
    int gasStation(vector<int>& gas, vector<int>& cost) {
        int start = 0;
        int total = 0;
        int current = 0;
        for (int i = 0; i < gas.size(); ++i) {
            current += (gas[i] - cost[i]);
            total += (gas[i] - cost[i]);
            if (current < 0) {
                start = i + 1;
                current = 0;
            }
        }
        if (total >= 0) {
            return start;
        } else {
            return -1;
        }
    }
};

C++ 解法, 执行用时: 19ms, 内存消耗: 3760KB, 提交时间: 2022-02-03

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param gas int整型vector 
     * @param cost int整型vector 
     * @return int整型
     */
    int gasStation(vector<int>& gas, vector<int>& cost) {
        // write code here
        int ans = 0; //当前剩余油量,若为0则continue;
        int start = 0; //起始站
        int sum = 0;     //走完一圈的剩余油量
        for(int i = 0; i < gas.size(); i++){
            ans += gas[i] - cost[i];
            sum += gas[i] - cost[i];
            if(ans < 0){
                ans = 0;
                start = (i + 1) % gas.size();
            }
        }
        if(sum >= 0)
        return start;
        
        return -1;
    }
};

C++ 解法, 执行用时: 19ms, 内存消耗: 3804KB, 提交时间: 2022-01-09

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param gas int整型vector 
     * @param cost int整型vector 
     * @return int整型
     */
    int gasStation(vector<int>& gas, vector<int>& cost) {
        // write code here
        int gasSum = 0;
        int costSum = 0;
        int curr = 0;
        int minVal = 0;
        int minIndex = 0;
        for (int i = 0; i < gas.size(); ++i) {
            gasSum += gas[i];
            costSum += cost[i];
            curr += gas[i] - cost[i];
            if (curr < minVal) {
                minVal = curr;
                minIndex = i;
            }
        }
        if (gasSum < costSum) {
            return -1;
        }
        return minIndex + 1;
    }
};

C++ 解法, 执行用时: 19ms, 内存消耗: 3808KB, 提交时间: 2021-12-20

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param gas int整型vector 
     * @param cost int整型vector 
     * @return int整型
     */
    int gasStation(vector<int>& gas, vector<int>& cost) {
        // write code here
        int curSum = 0;
        int totalSum = 0;
        int start = 0;
        for(int i = 0; i < gas.size(); i++){
            curSum += gas[i] - cost[i];
            totalSum += gas[i] - cost[i];
            if(curSum < 0){
                start = i + 1;
                curSum = 0;
            }
        }
        
        if(totalSum < 0)
            return -1;
        return start % gas.size();
        
    }
};

上一题