zoukankan      html  css  js  c++  java
  • 【leetcode】Gas Station

    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.

    Hide Tags
     Greedy
     
    注意一点,如果车从0,开到i没有油了,那么我们下一个尝试的点应该为i+1。
    因为在0点加了油,开到1时必定有剩余,实际上对于后面的点来说,初始油量是多了的
    所以如果从0开始都到不了i,说明0到i之间的任何点都到不了。
     
     1 class Solution {
     2 public:
     3     int canCompleteCircuit(vector<int> &gas, vector<int> &cost) {
     4        
     5        
     6         int total_oil=0;
     7         int index=0;
     8         int n=gas.size();
     9         
    10  
    11                
    12         for(int i=0;i<n;i++)
    13         {
    14             total_oil+=gas[i];
    15             total_oil-=cost[i];
    16            
    17             if(total_oil<0)
    18             {
    19                 total_oil=0;
    20                 index=i+1;
    21             }
    22         }
    23        
    24         //如果循环到了最后一个,没了油,说明任何点都没有希望到达了
    25         if(index==n)
    26         {
    27             return -1;
    28         }
    29        
    30         //如果一直循环到最后,仍然有油,说明从0点可以遍历整个路径
    31         if(index==0)
    32         {
    33             return 0;
    34         }
    35        
    36         //如果开到最后还剩油,我们继续往后计算。
    37         for(int i=0;i<n;i++)
    38         {
    39             total_oil+=gas[i];
    40             total_oil-=cost[i];
    41  
    42             //又回到了初始点,则说明从该点可以遍历整个路径
    43             if(i==index)
    44             {
    45                 return i;
    46             }
    47             
    48             //如果在中间任何一点没有了油,就不必再尝试了
    49             if(total_oil<0)
    50             {
    51                 break;
    52             }
    53         }
    54  
    55        
    56         return -1;
    57     }
    58 };
  • 相关阅读:
    梦和现实, 哪个更真实呢? 程序的现实? 还是上古的梦?
    C#基础知识总结(一)
    C#学习路线
    C# 成员默认访问权限(public、private、protected、internal)
    C#基础知识总结(二)
    正则表达式C#正则表达式的符号及例子
    Dynamics CRM 2016/365 窗体中添加按钮
    01 tsung安装
    07 tsung 参数化
    02 jmeter 简单发送http请求
  • 原文地址:https://www.cnblogs.com/reachteam/p/4251663.html
Copyright © 2011-2022 走看看