当前位置: 首页 > 面试题库 >

一个火车站所需的最少站台数量

柯立果
2023-03-14
问题内容

您将获得到达特定车站的列车的到达和出发时间。您需要找到在任何时间点容纳火车所需的最少站台数量。
例如:

arrival[] = {1:00, 1:40, 1:50, 2:00, 2:15, 4:00} 
departure[] = {1:10, 3:00, 2:20, 2:30, 3:15, 6:00}
No. of platforms required in above scenario = 4

请注意,抵达时间按时间顺序排列。


问题答案:

解决方案1:
您可以迭代所有间隔并检查有多少其他间隔与其重叠,但这将需要 o(N^2) 时间复杂度。

解决方案2:
我们将使用与归并排序非常相似的逻辑。

  • 对到达(arr)和离开(dep)数组进行排序。
  • 比较到达和离开数组中的当前元素并在两者中选择较小的一个。
  • 如果元素是从到达数组中提取的,则增加 platform_needed。
  • 如果元素是从出发数组中提取的,则减少 platform_needed。
  • 执行上述步骤时,我们需要跟踪达到 platform_needed 的最大值的计数。
  • 最后,我们将返回 platform_needed 达到的最大值。

时间复杂度:O(NLogN)
下图会让你更好地理解上面的代码

火车站所需平台最少数量的Java程序
TrainPlatformMain.java

package org.arpit.java2blog;

import java.util.Arrays;

public class TrainPlatformMain {
    public static void main(String args[])
    {
        // arr[] = {1:00, 1:40, 1:50, 2:00, 2:15, 4:00}
        // dep[] = {1:10, 3:00, 2:20, 2:30, 3:15, 6:00}

        int arr[] = {100, 140, 150, 200, 215, 400};
        int dep[] = {110, 300, 210, 230,315, 600};
        System.out.println("Minimum platforms needed:"+findPlatformsRequiredForStation(arr,dep,6));
    }

    static int findPlatformsRequiredForStation(int arr[], int dep[], int n)
    {
        int platform_needed = 0, maxPlatforms = 0;
        Arrays.sort(arr);
        Arrays.sort(dep);
        int i = 0, j = 0;

        // Similar to merge in merge sort
        while (i < n && j < n)
        {
            if (arr[i] < dep[j])
            {
                platform_needed++;
                i++;
                if (platform_needed > maxPlatforms) 
                    maxPlatforms = platform_needed;
            }
            else 
            {
                platform_needed--;
                j++;
            }
        }
        return maxPlatforms;
    }
}

当你运行上面的程序时,你会得到以下输出:

Minimum platforms needed:4


 类似资料:
  • 我有两个php应用程序:一个托管在example.com上,一个托管在example.org上。这两个应用程序都是不可或缺的,这意味着当用户使用example.com的应用程序时,它也会使用example.org,因为应用程序的一部分位于example.com,另一部分位于example.org。但有个问题。当用户使用example.com并需要example.org的功能时,他会通过单击exam

  • 给定一个非负整数数组,您最初位于数组的第一个索引处。 数组中的每个元素表示该位置的最大跳跃长度。 您的目标是以最少的跳跃次数达到最后一个索引。 例如:给定数组 到达最后一个指数的最小跳跃次数为2次。(从索引0跳转1步到1,然后3步到最后一个索引。) 我已经从左到右构建了一个dp[]数组,以便dp[i]指示从arr[0]到达arr[i]所需的最小跳转次数。最后,我们返回dp[n-1]。 我的代码的最

  • 本文向大家介绍C ++中的最小加油站数,包括了C ++中的最小加油站数的使用技巧和注意事项,需要的朋友参考一下 假设有一辆汽车,从起始位置行驶到距起始位置以东t英里的目的地。 现在,沿途有许多加油站。因此,每个加油站[i]代表加油站,该加油站位于起始位置以东的加油站[i] [0]英里处,并且该加油站的加油站数为[i] [1]升。 如果汽车以无限大的油箱启动,那么最初的油箱中将装有燃油。它每行驶1英

  • 我有一个wordpress多站点在Centos 6.5在 /var/www/html/site1访问在site1.com和一切都很好。 我想安装一个单一的网站称为site2在 /var/www/html/site2但可在site1.com/site2 这个site1的conf具有如下服务器块: 当我使用try files try_files/index时。html/索引。php$uri$uri/;

  • 请问建立一个PyPI镜像站需要多少磁盘空间? 全部包的全部版本同步,5秒同步一次 我尝试过使用chatglm,bing,但结果不明确

  • 问题内容: 因此,我的任务是从本质上读取一个文件(记事本文件),该文件具有许多火车停靠站以及从一个停靠站到另一个停靠站所花费的时间。例如,它看起来像: 现在,我需要返回并访问这些站点及其时间。我当时正在考虑读取文件并将其存储为字典。我的问题是,最好的字典是吗?还是有其他一些Python工具会被证明更有用?任何想法将不胜感激! 问题答案: 我会反驳说-直截了当的命令并不是最好的选择。 假设您有100