Leetcode134

思路:
遍历数组,遇到gas[i] >= cost[i] 时,尝试以i节点作为起始点,sumGas记录总油量,到达一个站点,加上gas[i]油量,并减去将要耗费的油量cost[i], 如果sumGas小于0,说明到达不了下一站。

public static int canCompleteCircuit(int[] gas, int[] cost) {
        // 记录遍历的节点个数
        int count = 0;
        int len = gas.length;
        for (int i = 0;;i++) {
            // 当遍历长度为一个数组长度,则停止
            if (count == len) {
                break;
            }
            count++;

            // 遍历中以gas[i] >= cost[i]的节点作为起点
            i = i % len;
            if (gas[i] >= cost[i]) {
                // 如果i节点开始能走完一圈,则返回i
                if (canCircuitHelper(gas, cost, i)) {
                    return i;
                }
            }

        }
        return -1;
    }

    private static boolean canCircuitHelper(int[] gas, int[] cost, int i) {
        int sumGas = 0;
        int count = 0;
        int len = gas.length;
        for (int j = i; ;j++) {
            if (count == len) {
                break;
            }
            count++;

            j = j % len;
            // 当前可以加油量 - 接下来要耗费的油量
            sumGas += gas[j] - cost[j];
            // 小于0,说明不能到达下一站
            if (sumGas < 0) {
                return false;
            }
        }
        return true;
    }

他人的解题:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值