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

    Solution:

    思路1:通过两层循环,依次从某个点出发并测试是否能够运行一圈。时间复杂度为O(n2),不满足要求。
    思路2:首先确认gas总和大于cost,因此判断能够绕圈。接下来寻找起始位置,我们可以借鉴归并排序的思路,如果某一段路gas>cost,则这段路剩余的油量可以支撑其他路段。因此问题变化为找到某个节点,在它之前的路段剩余油量为负,而从它开始到整个队列结束剩余油量为正(正油量可以不足前面路段的不足油量)。时间可以在O(n)完成。(分析 From CSDN)
    class Solution {
    public:
        int canCompleteCircuit(vector<int> &gas, vector<int> &cost) {
            int length = gas.size();
            int *sum = new int[length];
            for(int i = 0;i < length;i++)
                sum[i] = gas[i] - cost[i];
            
            int remain = 0;
            bool flag;
            for(int i = 0;i < length;i++)
            {
                if(sum[i] >= 0)
                {
                    //start from i
                    flag = true;
                    remain = 0;
                    for(int j = i;j < length + i;j++)
                    {
                        remain = remain + sum[j % length];
                        if(remain < 0) 
                        {
                            flag = false;
                            i= j; //o(n^2)到o(n)的小小优化。若是从i到j个出现了负,那么前i ~ j不再可能作为起点
                            break;
                        }
                        else continue;
                    }
                    if(flag)
                        return i;
                }
            }
            return -1;
        }
    };
  • 相关阅读:
    Python爬虫基础之BeautifulSoup
    Python爬虫基础之requests
    Python爬虫基础之UrlError
    Python爬虫基础之Cookie
    module 'socket' has no attribute的解决方案
    ECS——CentOS7下使用yum安装MariaDB
    用 Python 定位特定类型文件
    django——文本编辑器
    解决文件路径的问题的总结
    Django——发送邮件
  • 原文地址:https://www.cnblogs.com/changchengxiao/p/3597086.html
Copyright © 2020-2023  润新知