var canCompleteCircuit = function(gas, cost) { let rem = [] for(let i=0;i<gas.length;i++){ rem.push(gas[i]-cost[i]) } let sum = rem.reduce((a,b)=>a+b,0) if (sum<0) return -1 let cursum = 0 let start = 0 for(let i=0;i<rem.length;i++){ cursum += rem[i] if (cursum<0){ start = i+1 cursum = 0 continue } } return start };
1 2 3 4 5 6 7 8 9 10 11 12 13
// 更优解,ai根据我上面的代码做的简化,只需一层for循环 var canCompleteCircuit = function(gas, cost) { let total = 0, sum = 0, start = 0; for(let i = 0; i < gas.length; i++){ total += gas[i] - cost[i]; sum += gas[i] - cost[i]; if(sum < 0){ start = i + 1; sum = 0; } } return total < 0 ? -1 : start; };
例如,如果你有一个数组 [3, 1, 4] 并且你调用 sort((a, b) => a - b),那么在排序过程中,a 和 b 可能会是 (3, 1) 或者 (1, 4) 等等。
比较函数的返回值决定了 a 和 b 的排序顺序:
如果比较函数返回一个小于 0 的值,那么 a 会被排在 b 的前面。 如果比较函数返回 0,那么 a 和 b 的顺序不变。 如果比较函数返回一个大于 0 的值,那么 b 会被排在 a 的前面。 所以在 ((a, b) => a - b) 中,如果 a 小于 b,那么返回值是负数,a 会被排在 b 的前面,这就实现了升序排序。
var maxProfit = function(prices) { let result = 0; for(let i=0;i<prices.length-1;i++){ if(prices[i+1]>prices[i]){ result += prices[i+1] - prices[i] } } return result };
var maxSubArray = function(nums) { //是为了解决数组中全是负数的情况。 result = Number.MIN_SAFE_INTEGER sum = 0 for(let i=0;i<nums.length;i++){ sum += nums[i] if(sum>result){ result = sum } if(sum<0){ sum = 0 } } return result };
var canJump = function(nums) { let max = 0; for(let i=0;i<=max;i++){ if (i+nums[i]>max) max = i+nums[i] if(max>=nums.length-1) returntrue } returnfalse };