[LeetCode]134.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

【题意】

在环形路线上一共有N个加油站,每个加油站的存储容量为gas[i].你有一辆汽油无限存储的汽车,如果你从加油站i到下一站(i+1),你需要

消耗汽油cost[i]  你从某一个加油站开始你的旅程,但是你的汽车里没有任何的汽油。

如果你能沿着环形路线旅游一遍,返回你开始旅游的加油站的下标否则返回-1

注意:

解决方案唯一 

【分析】

首先想到的是 O(N^2)的解法,对每个点进行模拟。
O(N) 的解法是,设置两个变量,sum 判断当前的指针的有效性;total 则判断整个数组是否有
解,有就返回通过 sum 得到的下标,没有则返回 -1

如果total>=0即(gas[0] - cost[0])+........+(gas[n] - cost[n]) >= 0则肯定有一个解。

【代码】

/*********************************
*   日期:2014-01-25
*   作者:SJF0115
*   题号: Gas Station
*   来源:http://oj.leetcode.com/problems/gas-station/
*   结果:AC
*   来源:LeetCode
*   总结:
**********************************/
#include <iostream>
#include <stdio.h>
#include <vector>
using namespace std;

// 时间复杂度 O(n),空间复杂度 O(1)
class Solution {
public:
    int canCompleteCircuit(vector<int> &gas, vector<int> &cost) {
        int total = 0;
        int j = -1;
        for (int i = 0, sum = 0; i < gas.size(); ++i) {
            sum += gas[i] - cost[i];
            total += gas[i] - cost[i];
            if (sum < 0) {
                j = i;
                sum = 0;
            }
        }
        return total >= 0 ? j + 1 : -1;
    }
};

int main() {
    Solution solution;
    int result;
    vector<int> gas =  {0,4,5};
    vector<int> cost = {1,2,6};
    result = solution.canCompleteCircuit(gas,cost);
    printf("Result:%d\n",result);
    return 0;
}
时间: 2024-12-30 18:04:05

[LeetCode]134.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 e

LeetCode All in One 题目讲解汇总(持续更新中...)

终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 如果各位看官们,大神们发现了任何错误,或是代码无法通过OJ,或是有更好的解法,或是有任何疑问,意见和建议的话,请一定要在对应的帖子下面评论区留言告知博主啊,多谢多谢,祝大家刷得愉快,刷得精彩,刷出美好未来- 博主制作了一款iOS的应用"Leetcode Meet Me",里面有Leetcode上所有的题目,并且贴上了博主的解法,随时随地都能

LeetCode总结【转】

转自:http://blog.csdn.net/lanxu_yy/article/details/17848219 版权声明:本文为博主原创文章,未经博主允许不得转载. 最近完成了www.leetcode.com的online judge中151道算法题目.除各个题目有特殊巧妙的解法以外,大部分题目都是经典的算法或者数据结构,因此做了如下小结,具体的解题思路可以搜索我的博客:LeetCode题解 题目 算法 数据结构 注意事项 Clone Graph BFS 哈希表 Word Ladder II

算法题:UVA 10201 Adventures in Moving

Problem A: Adventures in Moving - Part IV To help you move from Waterloo to the big city, you are considering renting a moving truck. Gas prices being so high these days, you want to know how much the gas for such a beast will set you back. The truck

Log4j日志管理系统简单使用说明

Log4j有三个主要的组件:Loggers,Appenders和Layouts,这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使用这三个组件可以轻松的记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置.下面对三个组件分别进行说明: 1.Loggers Loggers组件在此系统中被分为五个级别:DEBUG.INFO.WARN.ERROR和FATAL.这五个级别是有顺序的,DEBUG < INFO < WARN < ERROR < FATAL,明白这一

【转】Log4Net使用指南

原文链接:http://www.cnblogs.com/dragon/archive/2005/03/24/124254.html 声明:本文内容主要译自Nauman Leghari的Using log4net,亦加入了个人的一点心得(节3.1.4). 请在这里下载示例代码   1           简介 1.1          Log4net的优点: 几乎所有的大型应用都会有自己的用于跟踪调试的API.因为一旦程序被部署以后,就不太可能再利用专门的调试工具了.然而一个管理员可能需要有一套强

.NET 4 System.Threading.Barrier 类

在Visual Studio 2010 and .NET Framework 4 Training Kit中有个System.Threading.Barrier的Demo,通过Barrier Class我们可以控制线程的运行,做到线程同步的效果. Barrier Class在使用上十分的简单,只要在Barrier的构造函数中传入participantCount(简单的说就是要等待的线程个数),并在要同步的点调用SignalAndWait方法就可以了.线程会在调用SignalAndWait之后暂停

为什么说用语言学鉴别网络攻击者的国籍不靠谱?

分析攻击中所用语言知识只是归因的工具之一,而且并非总那么可靠. 恶意软件.数据盗窃.勒索软件.每个人都想知道最新疯狂攻击背后的神秘人到底是谁.近年来,安全界在使用语言学识别作恶者上进行了一些尝试,但谈到归因问题,该方法仍有许多不足与限制. 最近,情报公司Flashpoint的分析师们声称WannaCry勒索软件与中国有关的时候,语言分析进入了人们的讨论的范畴.在此之前,很多安全研究都认为该勒索软件出自朝鲜,因为攻击重用了与Lazarus组织相关的基础设施组件. 另外,Taia Global 的报

期待已久的区块链“杀手级应用”,为什么是一款撸猫软件?

不满足于占领地球实体空间,猫星人正在逐步侵入虚拟世界.前段时间,社会还在热议"云养猫"现象--无法在生活中养猫的网友通过互联网上猫咪的图片或视频来满足撸猫的欲望,并催生了新一代互联网精神文化和产业经济. 这一周,区块链圈也感染了猫瘾症.11月28日,基于以太坊的养猫游戏CryptoKitties问世,随即病毒式地传播开来.它是目前最受欢迎的智能合约,猫咪的拍卖交易额超600万美元,还一不小心造成了以太坊网络长时间.大范围的拥堵. 天价撸猫 参与CryptoKitties游戏并不复杂,只