当前位置: 首页 > news >正文

CC17-加油站

目录

一、题目描述

二、解题思路

三、代码实现

四、代码解释

五、复杂度分析


一、题目描述

在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆车,油箱容量无限,从第 i 个加油站开往第 i + 1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。

请判断是否存在一个加油站,从那里出发可以绕环路行驶一周。如果存在,返回出发时加油站的编号;否则,返回 -1

说明:答案保证唯一。

示例:输入:gas = [2, 3, 1]cost = [3, 1, 2],返回值:1

二、解题思路

采用贪心算法的思想。我们需要判断总油量是否大于等于总消耗,如果总油量小于总消耗,直接返回 -1。否则,一定存在一个起始加油站。在遍历过程中,维护当前剩余油量,当当前剩余油量小于 0 时,说明从之前的起始点到当前点都不能作为起始点,将起始点更新为下一个点,并重置当前剩余油量。

三、代码实现

public class Solution {public int canCompleteCircuit(int[] gas, int[] cost) {int n = gas.length;int totalGas = 0;int currentGas = 0;int start = 0;for (int i = 0; i < n; i++) {totalGas += gas[i] - cost[i];currentGas += gas[i] - cost[i];// 如果当前油量为负,说明从start到i的位置都不能作为起点,更新start为i+1,重置currentGasif (currentGas < 0) {start = i + 1;currentGas = 0;}}// 如果总油量小于0,说明无法绕一圈;否则返回startreturn totalGas >= 0 ? start : -1;}// 测试方法public static void main(String[] args) {Solution solution = new Solution();int[] gas = {2, 3, 1};int[] cost = {3, 1, 2};System.out.println("示例输入的起始加油站编号:" + solution.canCompleteCircuit(gas, cost));}
}

四、代码解释

  1. 初始化变量n 为加油站的数量,totalGas 用于统计总剩余油量,currentGas 用于统计当前剩余油量,start 用于记录起始加油站的编号。
  2. 遍历加油站:在循环中,计算每个加油站的剩余油量(gas[i] - cost[i]),并累加到 totalGas 和 currentGas 中。
  3. 调整起始点:如果 currentGas 小于 0,说明从之前的 start 到当前 i 位置都不能作为起始点,将 start 更新为 i + 1,并将 currentGas 重置为 0,因为从新的起始点开始,当前剩余油量为 0。
  4. 判断并返回结果:循环结束后,判断 totalGas 是否大于等于 0。如果是,说明存在可以绕一圈的起始点,返回 start;否则,返回 -1

五、复杂度分析

  • 时间复杂度:O(n),其中 n 是加油站的数量。只需要遍历一次数组即可得到结果。
  • 空间复杂度:O(1),只需要常数级别的额外空间来存储变量。
http://www.dtcms.com/a/494965.html

相关文章:

  • 【办公类-120-01】20251016 UIBOT下载小说做成docx
  • RestTemplate发送Post请求报错:414 URI Too Long
  • 热力图:从逸出数据到宏观模式识别
  • 解决 gf / gau 与 Oh-My-Zsh 别名冲突的两种办法
  • 开源链动2+1模式、AI智能名片与S2B2C商城小程序:社群经济的数字化重构路径
  • 【详解vtkVoxelContoursToSurfaceFilter】:从有序XY平面轮廓生成三维表面
  • 版本控制器Git
  • 网站版建设南通制作企业网站
  • 网站后台管理系统的重要技术指标收录快的门户网站
  • 降本增效:如何用RustFS将企业存储TCO降低50%?
  • 当AI遇到信息系统:以AI+用户推荐的标签生命周期为例——标签为什么需要“死亡“?
  • 数据结构入门 (九):线索的“寻路”指引 —— 详解线索二叉树
  • wordpress 织梦十堰网站优化
  • Vue+ts 如何实现父组件和子组件通信
  • 广告制作网站源码高端网站设计公司
  • cpp-stub工作原理详细举例解析
  • 香港服务器CPU中E5和Gold的区别
  • linux shell编程实战 02 变量与交互式输入
  • 网站下载怎么做如何建一个免费试用网站
  • 【LeetCode热题100(45/100)】二叉树展开为链表
  • VUE封装axios调用
  • python的scikit-image库的功能介绍(亲测)
  • 做go分析的网站第一成品网站超市
  • ArrayList和LinkedList的区别
  • PinWin,一个窗口置顶工具
  • 一键式搜索引擎Hacking工具
  • CasADi:高性能数值优化与自动微分工具库详解
  • 中英文网站建设企业网站列表设计
  • 在 iOS 18 中,控制中心怎样添加应用快捷方式?
  • C++类型转换