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] 、そして最終的には、フラグを返す行に。しかし、問題は大きなものではなく、考え方は同じです。
これは昨日牛の客に見かけた顔文字の質問ですが、答えが間違っていれば当局が率直に言ってもいいですよ〜