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

LeetCode -- Gas Station

题目描述:


There are N gas stations along a circular route, where the amount of gas at station i is gas[i].


You have a car with an unlimited gas tank and it costs cost[i] of gas to travel from station i to its next station (i+1). You begin the journey with an empty tank at one of the gas stations.


Return the starting gas station's index if you can travel around the circuit once, otherwise return -1.


Note:
The solution is guaranteed to be unique.


即有n个gas站,到达第i个站的消耗为cost[i],能否找到一个出发点,可以跑完gas[0...n)一圈。








解法一:


分别以每个加油站作为出发点(stopNo)进行测试 , StopNo ∈gas[i,n):
delta= gasInCar(初始化为0) + gas[i] - cost[i]
如果delta >= 0,累加gasInCar,去下一站i,累加成功到达下一站的次数:counter。如果counter达到gas.Length,返回i。
否则,重置gasInCar = 0,stopNo++。i=下一站,counter重置为0。


由于解法为O(N^2)的时间复杂度,无法通过测试数据:


代码:


public int CanCompleteCircuit(int[] gas, int[] cost) {
        
        var gasInCar = 0;
        var stopNo = 0;
        
        var i = 0;
        var counter = 0;
        while(stopNo < gas.Length){
            
            if(gas[i] + gasInCar < cost[i]){
                // failed , start at a new place and re count again
                gasInCar = 0;
                stopNo ++;
                i = NextStop(stopNo, gas.Length);
                counter = 0;
            }
            else{
                gasInCar += gas[i]-cost[i];
                i = NextStop(i, gas.Length);
		        counter ++;
            }
            
            if(counter == gas.Length){
                return i;
            }
        }
        
        return -1;
    }
    
    private int NextStop(int stop,int len){
        if(stop < len - 1){
            stop ++;
        }
        else {
            stop = 0;
        }
        return stop;
    }






解法二:
将此题分解为两个小问题:
1.是否可完成一圈
2.找到出发点


存车中剩余gas为gasInCar=0,delta为当前站到下一站的gas[i]-cost[i],startAt为出发点。
一次遍历gas[i...n-1] :
如果delta >= 0 : gasInCar += delta(积累车中gas)
如果小于0(即不可达):gasInCar 设为 delta,startAt = i,即重置当前点为出发点以及车中的gas
每次积累totalDelta


最后判断totalDelta 是否大于0=能否完成一圈。




实现代码:


public int CanCompleteCircuit(int[] gas, int[] cost) 
    {
        var gasInCar = 0; 
    	var totalDelta = 0; 
    	var startAt = 0; 
     
    	for (var i = 0; i < gas.Length; i++) {
    		var delta = gas[i] - cost[i];
     
    		if (gasInCar >= 0) { 
    			gasInCar += delta;
    		} else {
    			gasInCar = delta;
    			startAt = i;
    		}
    		totalDelta += delta;
    	}
     
    	if (totalDelta >= 0){
    		return startAt;
    	}else{
    		return -1;
    	}
    }


相关文章:

  • 山东大学王小云教授成功破解MD5
  • LeetCode -- Implement Trie (Prefix Tree)
  • 2009年的3G上网卡市场,华为将会领跑
  • LeetCode -- Kth Smallest Element in a BST
  • SQL2005CLR函数扩展-环比计算
  • LeetCode -- Majority Element
  • LeetCode -- Max Points on a Line
  • ArcGIS Server Java ADF 案例教程 17
  • LeetCode -- Maximal Square
  • ArcGIS Server Java ADF 案例教程 18
  • LeetCode -- Summary Ranges
  • ArcGIS Server Java ADF 案例教程 19
  • ArcGIS Server Java ADF 案例教程 20
  • LeetCode -- Unique Paths
  • 警惕手机流氓软件的流行
  • javascript从右向左截取指定位数字符的3种方法
  • JavaScript设计模式与开发实践系列之策略模式
  • Java反射-动态类加载和重新加载
  • Next.js之基础概念(二)
  • Odoo domain写法及运用
  • 力扣(LeetCode)357
  • 面试总结JavaScript篇
  • 前端设计模式
  • 前端知识点整理(待续)
  • 悄悄地说一个bug
  • 我的面试准备过程--容器(更新中)
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • #前后端分离# 头条发布系统
  • (4)STL算法之比较
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转载)PyTorch代码规范最佳实践和样式指南
  • (转载)从 Java 代码到 Java 堆
  • .htaccess配置常用技巧
  • .Net Web窗口页属性
  • .net/c# memcached 获取所有缓存键(keys)
  • .Net6 Api Swagger配置
  • .NET多线程执行函数
  • .net解析传过来的xml_DOM4J解析XML文件
  • .NET连接数据库方式
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • /etc/fstab 只读无法修改的解决办法
  • /etc/fstab和/etc/mtab的区别
  • @RequestMapping用法详解
  • [ 攻防演练演示篇 ] 利用通达OA 文件上传漏洞上传webshell获取主机权限
  • [ 隧道技术 ] 反弹shell的集中常见方式(二)bash反弹shell
  • [2017][note]基于空间交叉相位调制的两个连续波在few layer铋Bi中的全光switch——
  • [30期] 我的学习方法