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

代码随想录 134.加油站

思路:

想法:暴力。

暴力的时间复杂度为O(n^2),暴力就是遍历每一个加油站为起点的情况,模拟一圈。如果跑了一圈,中途没有断油,而且最后油量大于等于0,说明这个点可以作为起点。for循环适合模拟从头到尾的遍历,而while循环适合模拟环形遍历,在本题遍历中需要借助while循环。

结果:超出时间限制。

方法一:贪心算法。直接从全局进行贪心选择(没有找局部最优,直接从全局最优的角度去考虑,不是严谨的贪心解法)。

(1)情况1:如果gas的总和小于cost的总和,那么无论从哪里出发,一定跑不了一圈。

(2)情况2:rest[i] = gas[i] - cost[i]为一天剩下的油,i从0开始计算累加到最后一站,如果累加没有出现负数,说明从0出发,油就没有断过,那么0就是起点。

(3)如果累加的最小值是负数,那么汽车就要从非0节点出发,从后向前,看哪个节点能把这个负数填平,能把这个负数填平的节点就是出发节点。

附代码:

class Solution {public int canCompleteCircuit(int[] gas, int[] cost) {int tank = 0; //当前油量int totalGas = 0; //总加油量int totalCost = 0; //总油耗int start = 0; //起点for(int i = 0;i < gas.length;i ++){totalGas += gas[i];totalCost += cost[i];tank += gas[i] - cost[i];if(tank < 0){ // tank变为负数意味着在i点没油,从0到i之间无法顺利环路一周tank = 0; //重置tankstart = i + 1; //起点变为i点往后一位}}if(totalCost > totalGas) return -1;return start;}
}

方法二:贪心算法(标准思路,推荐)。

1.如果总油量减去总消耗 >= 0,那么一定可以跑完一圈,说明各个站点的加油站剩油量rest[i]相加一定是 >= 0的。

2.每个加油站的剩油量rest[i] = gas[i] - cost[i]。

3.i从0开始累加rest[i],和即为curSum,一旦curSum < 0,说明[0,i]区间都不能作为起始位置,因为这个区间选择任何一个位置作为起点,到i这里都会断油,所以起始位置从i + 1算起,再从0计算curSum,如下图所示。

4.起始位置变为i + 1,但i + 1后可能仍可能出现更大的负数。如果出现更大的负数,就继续更新i,那么起始位置又变成了新的i + 1。

5.贪心策略。

(1)局部最优:当前累加的rest[i]的和curSum一旦小于0,起始位置至少要是i + 1,因为从i之前开始一定不行。

(2)全局最优:找到可以跑一圈的起始位置。

(3)局部最优可以推出全局最优,且找不到反例,可以贪心。

附代码:

class Solution {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;curSum = 0;}}if(totalSum < 0){return -1;}return index;}
}

http://www.dtcms.com/a/599199.html

相关文章:

  • 专门做水产海鲜的网站吗网站添加视频
  • 电子电气架构 --- 整车EEA简述
  • 双辽建设局网站手工制作房子
  • 网站服务器慢福田在线官网
  • 54.渗透-Yakit-基础模块应用(子域名收集)
  • 化妆品网站程序熟悉网站空间 域名等相关知识
  • Carla仿真多跳转发功能开发
  • 变量捕获相关内容
  • 【ZeroRange WebRTC】NAT 与防火墙在 WebRTC 中的影响
  • 交互设计作品集网站wordpress 增加其它语言
  • 揭阳做网站设计有没有免费做编辑网站管理系统
  • 做网站可以找设计公司吗有哪些做农产品的网站有哪些
  • 上海网站建设站点推广促销
  • python web 项目 部署成 Linux 服务
  • 门业网站模板下载清远东莞网站建设
  • 湖北 网站建设网站建设 人和商圈
  • 萧县城乡建设局网站小程序制作卡片列表
  • 怎么建设游网站主页网站建设 推广薪资
  • 【linux】解决NAT模型下使用Xshell连接虚拟机显示22端口connection failed问题
  • 免费行情网站app大全下载百度云搜索引擎
  • 专做婚礼logo的网站深圳住房和建设局网站登录界面
  • c 开发网站开发自己做都网站怎么发朋友圈
  • 电子商务网站的建设开发工具内蒙古建设厅网站首页
  • 网站建设 需要ae吗汽车o2o网站建设
  • 电子商务网站软件建设的可以做公众号封面图的网站
  • 网站开发常问的技术性问题asp网站发邮件
  • JavaScript 中Array 整理
  • 有多少网站建设外包深圳好的网站制作哪家快
  • 设计一个小程序多少钱seo服务公司怎么收费
  • 哪家公司做直播间网站wordpress数据统计插件