zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    mySql基础
    ECSHOP模糊分词搜索和商品列表关键字飘红功能
    smarty在循环的时候计数来显示这是第几次循环的功能
    PHP Warning: 的解决方法
    ECSHOP生成缩略图模糊
    ECSHOP商品描述和文章里不加水印,只在商品图片和商品相册加水印
    ECSHOP_百度收录网址后面有?from=rss
    在ecshop中添加页面,并且实现后台管理
    windows 2003子目录权限丢失及子目录权限无法继承更改的解决方法
    Newtonsoft.Json初探
  • 原文地址:https://www.cnblogs.com/cing/p/8780465.html
Copyright © 2011-2022 走看看