• 面试经典150题——Day14


    一、题目

    134. Gas Station

    There are n gas stations along a circular route, where the amount of gas at the ith station is gas[i].

    You have a car with an unlimited gas tank and it costs cost[i] of gas to travel from the ith station to its next (i + 1)th station. You begin the journey with an empty tank at one of the gas stations.

    Given two integer arrays gas and cost, return the starting gas station’s index if you can travel around the circuit once in the clockwise direction, otherwise return -1. If there exists a solution, it is guaranteed to be unique

    Example 1:

    Input: gas = [1,2,3,4,5], cost = [3,4,5,1,2]
    Output: 3
    Explanation:
    Start at station 3 (index 3) and fill up with 4 unit of gas. Your tank = 0 + 4 = 4
    Travel to station 4. Your tank = 4 - 1 + 5 = 8
    Travel to station 0. Your tank = 8 - 2 + 1 = 7
    Travel to station 1. Your tank = 7 - 3 + 2 = 6
    Travel to station 2. Your tank = 6 - 4 + 3 = 5
    Travel to station 3. The cost is 5. Your gas is just enough to travel back to station 3.
    Therefore, return 3 as the starting index.
    Example 2:

    Input: gas = [2,3,4], cost = [3,4,3]
    Output: -1
    Explanation:
    You can’t start at station 0 or 1, as there is not enough gas to travel to the next station.
    Let’s start at station 2 and fill up with 4 unit of gas. Your tank = 0 + 4 = 4
    Travel to station 0. Your tank = 4 - 3 + 2 = 3
    Travel to station 1. Your tank = 3 - 3 + 3 = 3
    You cannot travel back to station 2, as it requires 4 unit of gas but you only have 3.
    Therefore, you can’t travel around the circuit once no matter where you start.

    Constraints:

    n == gas.length == cost.length
    1 <= n <= 105
    0 <= gas[i], cost[i] <= 104

    题目来源: leetcode

    二、题解

    贪心算法

    class Solution {
    public:
        int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
            int currentSum = 0;
            int totalSum = 0;
            int index = 0;
            for(int i = 0;i < gas.size();i++){
                currentSum += gas[i] - cost[i];
                totalSum += gas[i] - cost[i];
                if(currentSum < 0) currentSum = 0,index = i + 1;
            }
            if(totalSum < 0) return -1;
            else return index;
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
  • 相关阅读:
    【PAT甲级】1017 Queueing at Bank
    JS多个HTTP请求限制最大并发数
    搜维尔科技:【周刊】适用于虚拟现实VR中的OptiTrack
    npm介绍
    Windows 系统下怎么获取 UDP 本机地址
    【深入理解Kotlin协程】CoroutineScope.launch源码追踪扒皮
    Linux 域名和DNS
    算法leetcode|11. 盛最多水的容器(rust重拳出击)
    适合汽车应用的MAX49017ATA/VY、MAX40025AAWT、MAX40025CAWT、MAX40026ATA/VY(线性)微功耗比较器
    奇安信天擎Linux客户端部署相关事项
  • 原文地址:https://blog.csdn.net/weixin_46841376/article/details/133797276