题目
在一条环路上有
n
个加油站,其中第i
个加油站有汽油gas[i]
升。你有一辆油箱容量无限的的汽车,从第
i
个加油站开往第i+1
个加油站需要消耗汽油cost[i]
升。你从其中的一个加油站出发,开始时油箱为空。给定两个整数数组
gas
和cost
,如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回-1
。如果存在解,则 保证 它是 唯一 的。
输入: gas = [1,2,3,4,5], cost = [3,4,5,1,2] 输出: 3
思路
我们先声明一个gascost数组用于记录形参gas和形参cost的值,由于形参gas和形参cost形参长度都一样,所以我们这里进行循环形参gas的值,将形参gas和形参cost的每一项都使用push方法添加到gascost数组中,将两个数组进行合并到gascost数组,在声明一个shifttime变量,他的值默认是形参gas的长度,在声明一个res变量用于存放最后的结果,存储的是下标,默认为0,然后进行循环,循环条件为只要shifttime变量值存在则一直循环,在循环中我们声明一个allgas变量,默认值为0,然后在进行循环gascost数组,默认循环变量j为0,每次循环j都+2,在循环中allgas变量于gascost数组当前项和当前的项的后一位相减后的数进行相加并重新赋值给allgas变量,在判断当前的allgas变量是否小于0,如果小于0则立即跳出循环,如果不小于0则进行下一轮循环,循环结束后,我们在判断当前allgas变量是否大于或者等于0,如果是则将当前形参gas的数据长度减去shifttime变量赋值给res变量后退出循环,接下来我们在声明两个变量,分别为tempgas变量和tempcost变量,他们分别是gascost数组中的第一位和第二位的值,然后在使用push方法将tempgas变量和tempcost变量变量添加到gascost数组的末尾,在将shifttime变量自减1,最后如果res存在则返回res,否则就将-1返回出去
var canCompleteCircuit = function (gas, cost) { let gascost = [] for (let i = 0; i < gas.length; i++) { gascost.push(gas[i]) gascost.push(cost[i]) } let shifttime = gas.length let res=0; while (!!shifttime) { let allgas = 0 for (let j = 0; j < gascost.length; j = j + 2) { allgas = allgas +(gascost[j] - gascost[j + 1]) if (allgas < 0) { break } } if (allgas >= 0) { res = gas.length - shifttime break } let tempgas = gascost.shift() let tempcost = gascost.shift() gascost.push(tempgas) gascost.push(tempcost) shifttime-- } return res || -1 };