程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> leetcode筆記:Gas Station

leetcode筆記:Gas Station

編輯:關於C++

一.題目描述

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

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

Return the starting gas station’s index if you can travel around the circuit once, otherwise return -1.

Note:
The solution is guaranteed to be unique.

環形路線上有N個加油站,每個加油站有汽油gas[i],從每個加油站到下一站消耗汽油cost[i],問從哪個加油站出發能夠回到起始點,如果都不能則返回-1,最後題目提到解是唯一的。

二.題目分析

以下解法的時間復雜度為:O(n),每個車站可加油量和每段距離的耗油量分別存放在gascost中,可以設置兩個變量:sum用於判斷當前是否有足夠的油量走到下一個加油站,若sum<0,則需將出發車站前移一個車站;remainingGas用於記錄車開完整個過程後的油量。最終,判斷remainingGas 是否大於零,是則返回初始車站的下標;若所有車站都出發都無法走完全程,則返回-1

三.示例代碼

#include 
using namespace std;

class Solution {
public:
    int canCompleteCircuit(vector &gas, vector &cost) 
    {
        int remainingGas = 0;
        int resultIndex = 0;
        int sum = 0;
        for (size_t i = 0; i < gas.size(); ++i) // 對每個車站的情況進行遍歷
        {
            remainingGas += gas[i] - cost[i];
            sum += gas[i] - cost[i];
            if (sum < 0)
            {
                sum = 0;
                resultIndex = i + 1;
            }
        }
        if (remainingGas < 0) return -1;    // 所有加油站的加油量小於消耗量
        else return resultIndex;            // 有解
    }
};

幾個處理結果:

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

四.小結

該題是比較有趣的一題,該方法只是多種方法中一種。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved