zoukankan      html  css  js  c++  java
  • letcode每日一题--加油站

    今天也是记录Letcode刷题的美好一天,要在防止自己变笨的路上继续加油,冲鸭!!!

    题目描述如下:


    我能想到的就是暴力破解,从第一个开始,逐个去试,如果要是结余油量为负数就直接进行下一个,代码如下:

    public int canCompleteCircuit(int[] gas, int[] cost) {
            for(int i=0;i<gas.length;i++){
                int prev=0;
                for(int j=i;j<i+gas.length;j++){
                    int realIndex=j%gas.length;
                    prev+=gas[realIndex]-cost[realIndex];
                    if(prev<0){
                        break;
                    }
                }
                if(prev>=0){
                    return i;
                }
            }
            return -1;
        }
    

    官方提供的题解大致与我的这个是相同的,但是看到有网友大神提供的利用折线图来解,时间复杂度 O(N),空间复杂度 O(1),所以还是果断学习一下吧!




    自己去画一画,会发现,改变出发点时整体折线图的形状是没有变的,改变的是y值,相当于将折线图在Y轴方向上上下平移。那么,当最小点落在X轴上时(也就是使得最小点y=0时),整体折线在X轴上方,y值恒大于等于0,也就是剩余油量一直不为负,可以绕行一圈。代码实现如下:

    public int canCompleteCircuit(int[] gas, int[] cost) {
            int minSpare=Integer.MAX_VALUE;
            int prev=0;
            int index=0;
            for(int i=0;i<gas.length;i++){
                prev+=gas[i]-cost[i];
                if(prev<minSpare){
                    minSpare=prev;
                    index=i;
                }
            }
            return prev<0?-1:(index+1)%gas.length;
        }
    
  • 相关阅读:
    滑块破解
    数据结构与算法
    图形验证码 tesserocr pillow
    drf版本控制 和django缓存,跨域问题,
    Django-DRF-图书增删改查 !!!
    Django 序列化-token
    Python- redis缓存 可达到瞬间并发量10W+
    GIT 版本管理-github&码云
    Python 三种过滤去重方法
    LINUX-MYSQL
  • 原文地址:https://www.cnblogs.com/MissWX/p/13998459.html
Copyright © 2011-2022 走看看