IT技術小屋

          秋風秋雨,皆入我心

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            38 隨筆 :: 1 文章 :: 19 評論 :: 0 Trackbacks
          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.

          首先,這個題目要明確如果gas[0] + gas[1] + ... + gas[n] >= cost[0] + cost[1] + .. + cost[n],那么這個題目一定有解。因為,根據條件移項可得:
          (gas[0] - cost[0]) + (gas[1] - cost[1]) + ... + (gas[n] - cost[n]) >= 0,由于最終結果大于等于零,因此一定可以通過加法交換律,得到一個序列,使得中間結果都為非負。因此可以將算法實現如下:
           1 public class GasStation {
           2     public int canCompleteCircuit(int[] gas, int[] cost) {
           3         int sum = 0, total = 0, len = gas.length, index = -1;
           4         for (int i = 0; i < len; i++) {
           5             sum += gas[i] - cost[i];
           6             total += gas[i] - cost[i];
           7             if (sum < 0) {
           8                 index = i;
           9                 sum = 0;
          10             }
          11         }
          12         return total >= 0 ? index + 1 : -1;
          13     }
          14 }
          posted on 2013-12-19 09:29 Meng Lee 閱讀(393) 評論(1)  編輯  收藏 所屬分類: Leetcode

          評論

          # re: [Leetcode] Gas Station 2014-01-25 09:56 SunnyYoona
          (gas[0] - cost[0]) + (gas[1] - cost[1]) + ... + (gas[n] - cost[n]) >= 0
          但是并不能保證每一個(gas[i] - cost[i])都大于0

          有點疑惑。。。。  回復  更多評論
            

          主站蜘蛛池模板: 绩溪县| 和平区| 卢龙县| 云阳县| 重庆市| 汉源县| 嵊泗县| 正宁县| 密山市| 莱州市| 德钦县| 鄂温| 寿阳县| 惠安县| 广宁县| 汶上县| 天门市| 扶风县| 思茅市| 封开县| 阜新市| 开原市| 惠水县| 衡阳县| 南康市| 历史| 察雅县| 宁德市| 曲松县| 鄂尔多斯市| 武义县| 尼木县| 枝江市| 澄城县| 东乌珠穆沁旗| 江津市| 三亚市| 青神县| 赫章县| 定边县| 乐亭县|