中远建设集团有限公司网站,wordpress主菜单导航插件,东莞百度网站快速优化,贸易公司做网站怎么样题目链接#xff1a;134. 加油站
题目描述
在一条环路上有 n 个加油站#xff0c;其中第 i 个加油站有汽油 gas[i] 升。
你有一辆油箱容量无限的的汽车#xff0c;从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发#xff0c;开始时…题目链接134. 加油站
题目描述
在一条环路上有 n 个加油站其中第 i 个加油站有汽油 gas[i] 升。
你有一辆油箱容量无限的的汽车从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发开始时油箱为空。
给定两个整数数组 gas 和 cost 如果你可以按顺序绕环路行驶一周则返回出发时加油站的编号否则返回 -1 。如果存在解则 保证 它是 唯一 的。
示例 1:
输入: gas [1,2,3,4,5], cost [3,4,5,1,2]
输出: 3
解释:
从 3 号加油站(索引为 3 处)出发可获得 4 升汽油。此时油箱有 0 4 4 升汽油
开往 4 号加油站此时油箱有 4 - 1 5 8 升汽油
开往 0 号加油站此时油箱有 8 - 2 1 7 升汽油
开往 1 号加油站此时油箱有 7 - 3 2 6 升汽油
开往 2 号加油站此时油箱有 6 - 4 3 5 升汽油
开往 3 号加油站你需要消耗 5 升汽油正好足够你返回到 3 号加油站。
因此3 可为起始索引。
示例 2:
输入: gas [2,3,4], cost [3,4,3]
输出: -1
解释:
你不能从 0 号或 1 号加油站出发因为没有足够的汽油可以让你行驶到下一个加油站。
我们从 2 号加油站出发可以获得 4 升汽油。 此时油箱有 0 4 4 升汽油
开往 0 号加油站此时油箱有 4 - 3 2 3 升汽油
开往 1 号加油站此时油箱有 3 - 3 3 3 升汽油
你无法返回 2 号加油站因为返程需要消耗 4 升汽油但是你的油箱只有 3 升汽油。
因此无论怎样你都不可能绕环路行驶一周。提示:
gas.length ncost.length n1 n 1050 gas[i], cost[i] 104
文章讲解代码随想录
视频讲解贪心算法得这么加油才能跑完全程LeetCode 134.加油站_哔哩哔哩_bilibili
题解1暴力法
思路计算每个加油站净增多少油从第1个开始模拟转圈。
/*** param {number[]} gas* param {number[]} cost* return {number}*/
var canCompleteCircuit function(gas, cost) {const arr gas.map((g, i) g - cost[i]); // 每个加油站净增加多少油let index 0; // 开始下标let i 0; // 遍历下标let rest 0; // 当前剩余油量while (index arr.length) {rest arr[i]; // 前往下一个加油站更新剩余油量const next (i 1) % arr.length; // 下一个加油站位置// 剩余量小于0更新开始位置到下一个位置if (rest 0) {// 当前位置在开始位置之前说明没有转一圈的方法if (i index) {return -1;}index i 1;i index;rest 0;continue;}// 下一个位置就绕够一圈了判断能不能到if (next index) {return rest arr[next] 0 ? index : -1;}i next; // 更新遍历下标}return -1; // 所有位置都不能转一圈
};
分析时间复杂度为 O(n)空间复杂度为 O(1)。
题解2贪心算法
思路若总油量小于总消耗量则不可能走完一圈。在每个加油站记录当前剩余油量若剩余油量小于0则开始位置为此位置向后一个位置。当走过最后一个加油站后总油量大于总消耗则可以走完一圈返回开始位置。
/*** param {number[]} gas* param {number[]} cost* return {number}*/
var canCompleteCircuit function(gas, cost) {let start 0; // 开始下标let total 0;let cur 0; // 当前剩余油量for (let i 0; i gas.length; i) {total gas[i] - cost[i]; // 更新总剩余量cur gas[i] - cost[i]; // 更新当前剩余量// cur 小于0则更新 startif (cur 0) {start i 1;cur 0;}}return total 0 ? start : -1; // 根据总剩余量判断能不能走完一圈
};
分析时间复杂度为 O(n)空间复杂度为 O(1)。
收获
贪心算法是一个局部最优推导全局最优的过程。