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

问题描述

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

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

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

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

TrainDeparture.png

火车站所需平台最少数量的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

解决方法

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

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

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...