zoukankan      html  css  js  c++  java
  • 【数据结构与算法】字节面试算法题

    字节跳动在北京有N个工区

    题目描述:

    第一题. 字节跳动在北京有N个工区,形成一个环状,Bytebus是往返在各个工区的通勤车,按工区的顺序行驶,其中第 i 个工区有汽油 gas[i] 升。你有一辆油箱容量无限的的Bytebus,从第 i 个工区开往第 i+1 个工区需要消耗汽油 cost[i] 升。你从其中的一个工区出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时工区的编号,否则返回 -1。

    示例:

    输入:
    gas = [1,2,3,4,5]
    cost = [3,4,5,1,2]
    输出:
    3
    

    思想:

    我也不知道这算什么思想,具体看下面注释吧。时间复杂度O(n)。

    代码:

    static int staNum(int[] gas, int[] cost) {
        int len = gas.length;
        int nowLeft=0;
        int preCost=0,flag=0;//flag标记起点下标
        for(int i=0;i<len;++i){
            nowLeft+= gas[i] - cost[(i+1+len)%len];
            if(nowLeft<0){//此时油量为负数
                preCost+=nowLeft;//累计负的油量
                nowLeft=0;//清零重新开始
                flag=i+1;//表示将下一个工区作为起点
            }
        }
        if(nowLeft+preCost<0){//总剩余油量为负数返回-1
            return -1;
        }
        return flag+1;
    }
    

    另外,我昨天跟同学讨论了下,感觉题目关于 i 的理解有点歧义,比如,从 gas[0] 到 gas[1] 需要耗费的油量是 cost[0] 还是 cost[1] 啊,上面的代码是按照 cost[1] 来的。如果是 cost[0] 的话,就更直白了,把代码中的 cost[(i+1+len)%len] 换成cost[i],最后return flag就行。不过问题不大,思路是一样的。

    这是昨天在牛客上看到的一个面经里的题,如果解答有误,看官们直言不讳即可~

  • 相关阅读:
    20145201 《Java程序设计》第一周学习总结
    调查问卷
    Hello Java
    Java学习——开端
    java,我准备好了
    20145229吴姗珊 《Java程序设计》第4周学习总结
    20145229吴姗珊 《Java程序设计》第3周学习总结
    20145229吴姗珊《Java程序设计》第二周学习总结
    20145229吴姗珊《JAVA程序设计》第一周学习总结
    20145207 《信息安全系统设计基础》期中总结
  • 原文地址:https://www.cnblogs.com/buptleida/p/12672490.html
Copyright © 2011-2022 走看看