zoukankan      html  css  js  c++  java
  • 2. 环形路加油

    此题在2008年Google暑期实习生面试中出现过。

    有一个环形公路上有n个加油站,第i个加油站的油量为ai。假设有一辆邮箱体积无穷大的汽车,初始邮箱是空的,汽车从加油站i行驶到加油站i+1需耗油g[i]

    问是否能够选出某个加油站作为起点,使汽车能够绕环形公路行驶一圈返回到该加油站。

    实现函数int selectGasStation(int a[], int g[], int n),如果存在满足条件的加油站,返回该加油站的序号(0-based)。否则返回-1。

    提示:n可能达到106O(n2)的枚举算法会超出时间限制。

    因为是环形公路,把这个展开成线性数组,也就是两个重复的数组排一起。看了别人的提示也才知道这一点的……

            static int FindGasStation(int[] a, int[] g, int n)
            {
                int[] d = new int[2*n];
                for (int i = 0; i < n; i++)
                {
                    d[i] = a[i] - g[i];
                    d[n + i] = a[i] - g[i];
                }
                int sum = 0;
                int count = 0;
                int result = 0;
                for (int i = 0; i < 2*n; i++)
                {
                    if (count == n)
                    {
                        return result;
                    }
                    if (sum < 0)
                    {
                        sum = 0;
                        count = 0;
                        result = i;
                    }
                    sum += d[i];
                    count++;
                }
                return -1;
            }
    View Code
  • 相关阅读:
    如何申请iOS开发者证书/发布app到手机
    STL
    TCP/IP编程
    STL
    STL
    Python网络爬虫
    Python网络爬虫
    Python网络爬虫
    Python编程-基础知识-python项目包和文件的管理以及如何引用相对路径的包和模块
    带你认识HL7和CDA
  • 原文地址:https://www.cnblogs.com/Ligeance/p/3396498.html
Copyright © 2011-2022 走看看