Leetcode面试经典150题-134.加油站

解法都在代码里,不懂就留言或者私信

java 复制代码
class Solution {
    public int canCompleteCircuit(int[] gas, int[] cost) {
        /**如果只有一个加油站,那它本来就在那个为止,0就是它的编号?但是这只是你的想象,题目有个变态规定,自己到自己也得看油量。。。*/
        if(gas.length == 1) {
            return gas[0]>=cost[0]? 0 : -1;
        }
        /**如果大于1个就需要试一下某个点出发能到的最远距离,如果能经过n个点,那它就是良好出发点 */
        /**curIndex代表当前遍历的加油站的下标,我们从0开始试*/
        int curIndex = 0;
        int n = gas.length;
        while(curIndex < n) {
             /**gasSum表示当前累计的油量,尝试每个点开始的时候这个都重新设置为0*/
            int gasSum = 0;
            /**count用来统计走过的加油站,因为最终要走到自己才算,所以自己这个点记为0*/
            int count = 0;
            while(count < n) {
                /**下一个到的节点*/
                int nextIndex = (curIndex + count)%n;
                gasSum += (gas[nextIndex] - cost[nextIndex]);
                /**如果当前的油量到不了下一个加油站就确定不是良好的出发点 */
                if(gasSum < 0) {
                    break;
                }
                /**如果能到下个加油站,走过的加油站就又多了一个*/
                count ++;
            }
            /**如果从当前的加油站出发走过了n个加油站(从while条件判断退出的),当前就是良好出发点*/
            if(count == n) {
                return curIndex;
            }
            /**如果没有走过n个加油站(从if里的break退出的),那i到i+count都不可能,因为我是带着油来的到你这都过去不
            从你这更不可能,所以从i+count+1开始试,这里不要去做取余,因为取余的话会导致不准确,比如一共5个加油站,你从3走了三步
            确实是1,但是如果这里取1,你就又变成从1开始走了,其实从1开始走我们是走不通的,不然也不会尝试3,所以这里写了会变成死循环可能*/
            curIndex = curIndex+count+1;
        }
        /**中间没有发现能走完全程的就是没有,返回-1代表没有任何一个 */
        return -1;
       
    }
}
相关推荐
八解毒剂1 小时前
数据结构-平衡二叉树——对二叉搜索树的优化
数据结构·c++·算法
运行时记录2 小时前
别再手动写提示词了 — SkillOpt 让技能文档自己进化
算法
啦啦啦啦啦zzzz2 小时前
算法总结(二分查找、双指针)
c++·算法
qq_8573058192 小时前
python语法
开发语言·python·算法
DXM05213 小时前
第9期|从机器学习到深度学习:AI遥感解译的进化逻辑
人工智能·算法·计算机视觉
小蒋学算法3 小时前
算法-阶乘函数后K个零
算法
weixin_307779133 小时前
智能模拟数据生成平台:生成式AI合成数据技术重塑开发测试效能
人工智能·测试工具·算法·测试用例
羊羊小栈4 小时前
Uplift营销供应链协同决策系统(基于Uplift因果推断与运筹优化算法)
前端·人工智能·算法·毕业设计·大作业
金融小师妹4 小时前
AI因子共振模型显示:金银比突破区间上沿,白银定价逻辑进入再校准阶段
人工智能·算法·均值算法·线性回归
J2虾虾4 小时前
C语言 typedef 用法
c语言·数据结构·算法