首页 > 其他分享 >LeetCode 134.加油站

LeetCode 134.加油站

时间:2023-05-07 14:05:17浏览次数:62  
标签:开往 int gas 汽油 加油站 134 油箱 LeetCode

1.题目:

在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。

你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 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 可为起始索引。

来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/gas-station 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。





2.代码:

class Solution {
    public int canCompleteCircuit(int[] gas, int[] cost) {
        int curSum = 0;//当前累加的剩余油量
        int totalSum =0;//总的剩余油量
        int start=0;//出发点
        for(int i=0; i<gas.length; i++){//模拟整个过程
            curSum+=gas[i]-cost[i];//当前累加的剩余油量
            totalSum +=gas[i]-cost[i];//总的剩余油量
            if(curSum<0){//如果当前累加的剩余油量小于0,那么就说明后一个i是起点
                start=i+1;
                curSum=0;//要把当前剩余油量变成0,重新进行累加
            }
        }
        if(totalSum<0) return -1;//当累加的总的剩余油量小于0时,就说明是不能行使一周的
        return start;//直接返回起始索引就行

    }
}





标签:开往,int,gas,汽油,加油站,134,油箱,LeetCode
From: https://blog.51cto.com/u_15806469/6251900

相关文章

  • 【二分查找】LeetCode 33. 搜索旋转排序数组思路
    题目链接33.搜索旋转排序数组思路思路都在注释里代码classSolution{publicintsearch(int[]nums,inttarget){intlen=nums.length;if(len==0){return-1;}intleft=0,right=len-1;//1.......
  • 【二分查找】LeetCode 528. 按权重随机选择
    题目链接528.按权重随机选择思路代码classSolution{privateint[]sum;publicSolution(int[]w){sum=newint[w.length+1];for(inti=1;i<sum.length;i++){sum[i]=sum[i-1]+w[i-1];}}p......
  • 【二分查找】LeetCode 69. x 的平方根
    题目链接69.x的平方根思路基本思路是在区间\([1,x/2]\)中使用二分查找(因为平方根必然小于\(x/2\)),只不过需要注意一些细节。因为使用的是闭区间查找,所以判断循环终止的条件为\(left\leqright\)。为了防止溢出,使用mid=(right-left)/2+left和mid==x/mi......
  • 【二分查找】LeetCode 540. 有序数组中的单一元素
    题目链接540.有序数组中的单一元素思路假如不存在单个的元素,那么在奇数位置上总是成对元素的第一个元素,偶数位置上总是成对元素的第二个元素,但是如果加入了单个元素呢?我们可以看到在单个元素的左边这个特点没有变化,但是在单个元素的右边,奇数位置上总是成对元素的第二个元素,偶......
  • AtCoder Regular Contest 134 E Modulo Nim
    洛谷传送门AtCoder传送门It'sallMAGIC这种题目一般先考虑局面要满足什么条件能必胜,然后根据这个性质来计数。如果把黑板上的数写成一个集合\(S\),那么:\(\varnothing\)为必胜态,\(\{1\},\{2\}\)显然为必败态,打表发现其他单元素集合都为必胜态;如果\(\existsx\inS,x......
  • 134. 加油站
    在一条环路上有n个加油站,其中第i个加油站有汽油gas[i]升。你有一辆油箱容量无限的的汽车,从第i个加油站开往第i+1个加油站需要消耗汽油cost[i]升。你从其中的一个加油站出发,开始时油箱为空。给定两个整数数组gas和cost,如果你可以绕环路行驶一周,则返回出发时加油......
  • LeetCode 24. 两两交换链表中的节点
    题目链接:LeetCode24.两两交换链表中的节点本题不涉及算法,直接模拟就可以了,但是模拟的过程中,最好进行画图演示,不然容易出错。想要达到两两交换链表中节点的效果,就需要按照以下三个步骤进行。同时为了将头结点和非头结点统一处理,因此新建一个虚拟头结点,初始时,cur指向虚拟头结......
  • LeetCode 周赛 343(2023/04/30)结合「下一个排列」的贪心构造问题
    本文已收录到AndroidFamily,技术和职场问题,请关注公众号[彭旭锐]提问。大家好,我是小彭。今天是五一假期的第二天,打周赛的人数比前一天的双周赛多了,难道大家都只玩一天吗?这场周赛是LeetCode第343场单周赛,如果不考虑第一题摆烂的翻译,整体题目质量还是很不错哒。往期回顾:L......
  • LeetCode刷题记录|LeetCode热题100|226.翻转二叉树(easy)
    题目描述:给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点。 思路与算法:从根节点开始,递归地对树进行遍历,并从叶子节点先开始翻转。如果当前遍历到的节点root的左右两棵子树都已经翻转,只需交换两棵子树的位置,即可完成以root为根节点的整棵子树的翻转。时间复......
  • LeetCode 206. 反转链表
    题目链接:LeetCode206.反转链表本题是链表题目中非常重要的一道题目--反转指针。解题方法有两种:1.双指针法2.递归法首先看双指针法:快指针总是在慢指针的前面,也就是每次将快指针的节点的next指针更新成指向慢指针,这样不就进行了反转嘛。完整代码如下:funcreverseList(hea......