134. 加油站

解法1

暴力模拟 + 缓存

走过的路,没走通。说明:中间节点也是不通的。

java 复制代码
class Solution {

    boolean[] visited;

    private boolean canComplete(int[] gas, int[] cost, int start) {
        if (visited[start]) {
            return false;
        }
        int n = gas.length;
        int totalGas = 0;
        int now = start;
        while (true) {
            visited[now] = true;
            totalGas += gas[now];
            if (totalGas < cost[now]) {
                return false;
            }
            totalGas -= cost[now];
            now++;
            if (now == n) {
                now = 0;
            }
            if (now == start) {
                return true;
            }
        }
    }

    public int canCompleteCircuit(int[] gas, int[] cost) {
        int n = gas.length;
        visited = new boolean[n];
        for (int start = 0; start < n; start++) {
            if (canComplete(gas, cost, start)) {
                return start;
            }
        }
        return -1;
    }
}

解法2

走过的路,没走通。说明:中间节点也是不通的。

优化效率。

java 复制代码
class Solution {
    public int canCompleteCircuit(int[] gas, int[] cost) {
        int n = gas.length;
        for (int i = 0; i < n; i++) {
            gas[i] -= cost[i];
        }
        for (int start = 0; start < n; start++) {
            int totalGas = 0, now = start, next = start;
            while (true) {
                if (now > next) {
                    next = now;
                }
                totalGas += gas[now++];
                if (totalGas < 0) {
                    break;
                }
                if (now == n) {
                    now = 0;
                }
                if (now == start) {
                    return now;
                }
            }
            start = next;
        }
        return -1;
    }
}
相关推荐
_extraordinary_3 分钟前
Java 多线程进阶(四)-- 锁策略,CAS,synchronized的原理,JUC当中常见的类
java·开发语言
pusue_the_sun7 分钟前
每日算法题推送
算法·双指针
JasmineX-118 分钟前
数据结构——顺序表(c语言笔记)
c语言·开发语言·数据结构·笔记
KyollBM21 分钟前
【Luogu】P9809 [SHOI2006] 作业 Homework (根号算法)
算法
jmxwzy26 分钟前
leetcode274.H指数
算法
java搬砖工-苤-初心不变39 分钟前
OpenResty 配合 Lua 脚本的使用
开发语言·lua·openresty
IT灰猫44 分钟前
C++轻量级配置管理器升级版
开发语言·c++·设计模式·配置管理·ini解析
纪元A梦1 小时前
贪心算法应用:信用评分分箱问题详解
java·算法·贪心算法
Swift社区1 小时前
如何解决 Vue2 前端项目为何无法访问本地资源(chunk.js 加载一直 pending/转圈)
开发语言·前端·javascript
大飞pkz1 小时前
【设计模式】题目小练2
开发语言·设计模式·c#·题目小练