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

贪心算法---加油站

题目:

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

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

给定两个整数数组 gascost ,如果你可以按顺序绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1 。如果存在解,则 保证 它是 唯一 的。

思路:

如果总油量减去总消耗大于等于0,那么一定可以跑完一圈,说明各个站点的加油站剩油量rest[i]之和是大于等于0的。

每个加油站的剩油量rest[i]为gas[i]-cost[i],i从0开始累加rest[i],和记为curSum,一旦curSum小于0,说明[0,i]区间都不能作为起始位置,因为这个区间选择任何一个位置作为起点,到这里都会断油,所以起点为i+1,curSum归0。

代码:

    public int canCompleteCircuit(int[] gas, int[] cost) {int curSum=0;//记录从起点到现在的点剩余的油量int totalSum=0;//记录环路一周剩余的油量int index=0;//记录起始点下标for(int i=0;i<gas.length;i++){curSum+=gas[i]-cost[i];totalSum+=gas[i]-cost[i];if(curSum<0){index=(i+1)%gas.length;//如果不%,遍历到最后一个节点时index会溢出curSum=0;}}if(totalSum<0) return -1;return index;}


http://www.mrgr.cn/news/13317.html

相关文章:

  • 基于SSM+小程序的智慧旅游平台登录管理系统(旅游2)(源码+sql脚本+视频导入教程+文档)
  • 【xilinx】学习ZynqSOC发现教程和vitis2023版本界面对不上
  • C# 泛型约束
  • webpack和vite分别是什么,优势
  • 学习区块链?看我就够了!
  • MySQL索引(三)
  • 重装后的电脑怎么分区?轻松优化存储空间
  • 【苍穹外卖】Day2 员工接口 分类接口
  • BERT模型
  • C++语法基础(一)
  • 无人机 PX4 飞控 | ROS应用层开发:指令(字符串)订阅功能
  • 新增页面保存后,跳转为详情页,同时关闭新增页。(即路由detail/1?type=1,变为detail/2/2?type=2id=2)
  • Go学习笔记(一)语法
  • GNU/Linux - RSYSLOG
  • 移动端+PC端源码,智慧城管执法系统,后端框架:springboot,移动端:uniapp
  • Git实战精粹
  • RSA加密解密算法认识及signln_resolve
  • 初识redis:Zset有序集合
  • fastjson序列化时过滤字段的方法
  • C++ DAY2