• Gas Station


    1、基本思路

      依次从每个加油站开始加,判断是否满足条件。O(n^2)的复杂度,会超时。

    2、O(n)的方法

      一种思路是,如果从 i 到 j 的油的余量和小于0,则开始点必定在 i 左边,所以如果小于0,开始点左移,大于0,到达的位置右移;

     1     int canCompleteCircuit(vector<int> &gas, vector<int> &cost) {
     2         // Note: The Solution object is instantiated only once and is reused by each test case.
     3         int begin = 0, end = 0;
     4         int sum = 0;
     5         int n = gas.size();
     6         int i = 0;
     7         while(n > 0){
     8             sum += (gas[i]-cost[i]);
     9             if(sum >= 0){
    10                 end++;
    11                 i = end;
    12             }
    13             else{
    14                 begin--;
    15                 if(begin<0)
    16                     begin = gas.size()-1;
    17                 i = begin;
    18             }
    19             n--;
    20         }
    21         if(sum < 0)
    22             return -1;
    23         return begin;
    24     }

      另外一种思路时,用两个变量sum和total,它们都逐次加上油的余量,如果sum小于0,那么开始点更新为当前坐标,sum归零。遍历结束后,如果total小于0则没有方案,否则返回开始坐标。

     1     int canCompleteCircuit(vector<int> &gas, vector<int> &cost) {
     2         // Note: The Solution object is instantiated only once and is reused by each test case.
     3         int n = gas.size();
     4         int res = 0, sum = 0, total = 0;
     5         for(int i = 0; i < n; i++){
     6             sum += (gas[i]-cost[i]);
     7             total += (gas[i]-cost[i]);
     8             if(sum < 0){
     9                 res = (i+1)%n;
    10                 sum = 0;
    11             }
    12         }
    13         if(total < 0)
    14             return -1;
    15         return res;
    16     }
  • 相关阅读:
    Spring第一次测试错题解析
    正则回顾
    Spring经典---AOP
    动态代理
    MyBatis第一次测试卷---错题分析
    JS中对数组元素进行增删改移
    限制条件补全代码系列题
    字符串去空格
    数组去重
    数组排序
  • 原文地址:https://www.cnblogs.com/waruzhi/p/3346947.html
Copyright © 2020-2023  润新知