• 134.Gas Station


    题目链接

    题目大意:一个circle圆环,第i个位置,有汽油gas[i],而汽车从i到i+1,需要汽油cost[i]。求解,从哪个位置开始,汽车能走完圆环。如果走不完则返回-1,能走完则返回index。例子如下:

    法一:两个for循环。直接求解每个可能的起始位置,然后计算能否在有汽油的情况下,走完全环。o(n^2)。超时了。代码如下:

     1     public int canComplete(int[] gas, int[] cost) {
     2         int len = gas.length;
     3         int cnt = 0;
     4         int flag = 0;
     5         //逐一遍历每一种可能
     6         for(int i = 0; i < len; i++) {
     7             flag = 0;
     8             //对于每一个可能起始点,都计算一下circle能否完成汽车行驶任务
     9             for(int j = i; j < len; j++) {
    10                 cnt += gas[j] - cost[j];
    11                 if(cnt < 0 ) {
    12                     cnt = 0;
    13                     flag = -1;
    14                     break;
    15                 }
    16             }
    17             if(flag == -1) {
    18                 continue;
    19             }
    20             for(int j = 0; j < i; j++) {
    21                 cnt += gas[j] - cost[j];
    22                 if(cnt < 0) {
    23                     cnt = 0;
    24                     flag = -1;
    25                     break;
    26                 }
    27             }
    28             if(flag == 0) {
    29                 return i;
    30             }
    31         }
    32         return -1;
    33     }
    View Code

    法二(借鉴):贪心。待证明。具体见代码(耗时1ms):

     1     public int canComplete(int[] gas, int[] cost) {
     2         int gas_cnt = 0, cost_cnt = 0;
     3         int index = 0, cnt = 0;
     4         for(int i = 0; i < gas.length; i++) {
     5             //统计所有汽油数量
     6             gas_cnt += gas[i];
     7             //统计汽车行驶花费的所有汽油数量
     8             cost_cnt += cost[i];
     9             //统计到目前为止,汽油数量能否支撑汽车行驶
    10             cnt += gas[i] - cost[i];
    11             //如果一旦行驶不了,则从当前位置的下一个位置作为起始点
    12             //原因:由于到现在都行驶不了,如果选择这个位置之前的任何一个位置作为起始点,汽油数量只会更少
    13             //由于如果汽油数量>=花费数量,则一定存在解,所以所找到的解一定符合要求。
    14             if(cnt < 0) {
    15                 cnt = 0;
    16                 index = i + 1;
    17             }
    18         }
    19         //如果汽油数量<花费数量,则一定不存在解。
    20         if(gas_cnt < cost_cnt) {
    21             return -1;
    22         }
    23         return index;
    24     }
    View Code
  • 相关阅读:
    论语言思维的差异
    lua经典问题
    跳槽的故事
    未来一年计划
    腾讯面试题 找重复的数
    nodejs学习
    node记录
    mysql 常用总结
    ubuntu 服务器搭建汇总
    ubuntu下安装golang
  • 原文地址:https://www.cnblogs.com/cing/p/8780465.html
Copyright © 2020-2023  润新知