栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

解决方案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


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/368680.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号