134. 加油站

  • 第一种想法就是每个位置都遍历一遍 O(n*n)
class Solution {
    public int canCompleteCircuit(int[] gas, int[] cost) {
        int ans[] = new int[gas.length];
        for (int i = 0; i < ans.length; i++) {
            ans[i] = gas[i] - cost[i];
        }
        for (int i = 0; i < ans.length; i++) {
            int j = 0;
            int temp = 0;
            while (j < ans.length) {
                temp += ans[(i+j)%ans.length];
                if (temp < 0) break;
                j++;
            }
            if(j==ans.length)return i;
        }
        return -1;
    }
}
  • 第二种想法 优化上面的代码 也就是找中断点 然后接着后面查找

    class Solution {
      public int canCompleteCircuit(int[] gas, int[] cost) {
          // 加油站起始点
          int start = 0;
          // 从0-start需要补充多少油 
          int total = 0;
          // 从start开始到i 油量   
          int tank = 0;
    
          for(int i=0; i<gas.length; i++) {
              // 走过ith 加油站还剩下多少油 (>0)
              // 要走ith 加油站差多少油 (<0)
              tank += gas[i] - cost[i];
              // 油不够了,start不能做起始点;
              // 且start ~ i 都不可做起始点。
              if(tank < 0) {
                  start = i+1;
                  total += tank;
                  tank = 0;
              }
          }
          return total+tank >= 0 ?start : -1;
      }
    }
全部评论

相关推荐

01-02 00:50
三峡大学 Java
程序员牛肉:这简历一出手就离失业不远了。 作为一家公司来讲,我如果要招日常实习生,那我对实习生最基本的要求就是要能干活,毕竟你就待三四个月,谁会留心培养你? 那么除了院校之外,最重要的就是项目和实习了。没有实习的话项目就好好搞。 但是你说你这个项目吧:课程作业管理系统和TMS运输管理系统。这两个基本就和闹着玩差不多。 你作为一个想要应聘Java开发实习生的人,对后端的理解还仅仅停留在:“使用mapper和sql映射”,“使用SQL进行多表调用”,“基于MySQL简历表结构”,“基于Spring boot完成CURD操作”这种玩具上......... 找不到后端实习的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务