【データ構造とアルゴリズム】バイト面接アルゴリズム質問

ByteDanceは北京でN個のワークショップを開催

タイトルの説明:

最初の質問です。ByteBounceは北京にN個のワークゾーンがあり、リングを形成しています。Bytebusは、各ワークゾーンとの間で通勤する車で、ワークゾーンの順序で走行します。i番目のワークゾーンにはガソリンガス[i]リットルがあります。無制限の燃料タンク容量を備えたバイトバスがあります。i番目の作業ゾーンからi + 1番目の作業ゾーンまでは、ガソリンコスト[i]リットルを消費する必要があります。作業領域の1つから開始し、最初は燃料タンクが空です。環状道路を1週間移動できる場合は、出発時に作業エリアの番号に戻り、それ以外の場合は-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についての理解は少しあいまいです。たとえば、ガス[0]からガス[1]まで、消費される油の量はコスト[0]またはコスト[1]です。コードはコストに基づいています[1]。コストは[0]は、次いで、より簡単、コード場合コスト[(I + 1 + LEN )%LEN] 置き換えコスト[I] そして最終的には、フラグを返す行に。しかし、問題は大きなものではなく、考え方は同じです。

これは昨日牛の客に見かけた顔文字の質問ですが、答えが間違っていれば当局が率直に言ってもいいですよ〜

おすすめ

転載: www.cnblogs.com/buptleida/p/12672490.html
おすすめ