Java 什么´;检查所有订单的运行时间是多少?

Java 什么´;检查所有订单的运行时间是多少?,java,algorithm,performance,list,big-o,Java,Algorithm,Performance,List,Big O,如果carList中有订购类型的空闲汽车,该算法应检查订单列表中的每个订单 订单包含您希望订购的汽车类型以及取货和退货时间。现在我一直想知道这是否可以在O(nlog(n)+k)中运行,其中k表示不同车型的数量 public static boolean CheckAllOrder(List orderList, List carList) { int count = 0; for (int i = 0; i < orderList.size(); i++) {

如果carList中有订购类型的空闲汽车,该算法应检查订单列表中的每个订单

订单包含您希望订购的汽车类型以及取货和退货时间。现在我一直想知道这是否可以在
O(nlog(n)+k)
中运行,其中k表示不同车型的数量

public static boolean CheckAllOrder(List orderList, List carList) {
    int count = 0;
    for (int i = 0; i < orderList.size(); i++) {
        int type = orderList.get(i).type;
        long start = orderList.get(i).start;
        long end = orderList.get(i).end;
        for (int j = 0; j < carList.size(); j++) {
            Car currentCar = carList.get(j);
            if (currentCar.type == type) {
                if (currentCar.occTil == 0 && currentCar.occSince == 0) {
                    currentCar.occSince = start;
                    currentCar.occTil = end;
                    count++;
                    break;
                } else if (currentCar.occTil < start) {
                    currentCar.occTil = end;
                    count++;
                    break;
                } else if (currentCar.occSince > end) {
                    currentCar.occSince = start;
                    count++;
                    break;
                }
            }
        }
    }
    if (count == orderList.size()) {
        return true;
    } else {
        return false;
    }
}
公共静态布尔CheckAllOrder(列表顺序列表,列表列表列表){
整数计数=0;
对于(int i=0;iend){
currentCar.occSince=启动;
计数++;
打破
}
}
}
}
if(count==orderList.size()){
返回true;
}否则{
返回false;
}
}
我确实测试了我的代码,它似乎工作得很好。 我考虑对汽车类型使用哈希函数,因此我只需要运行一个较小的列表(哈希表中的每个列表只包含相同类型的汽车)。至少这是我的想法

以下是问题陈述:

我有k种不同的车型和n个订单 我需要检查是否所有订单都可以处理,这意味着没有无法执行的订单。这只能是因为没有一辆指定类型的汽车是免费的。如前所述,订单包含所需的车型、取货和退货时间


您将如何解决此问题?

我将这样做:

  • Bucket按汽车类型对订单进行排序。O(n)

  • 对于每种车型的订单。O(n对数(n)+k)

  • 如果找到的数量大于任何类型的车辆数量,则返回
    false
    (无法满足订单)。O(k)

  • 返回
    true
    (可以满足订单)。O(1)


  • 总复杂度O(n log(n)+k)

    我假设每种车型只有一辆车可用?然后,问题可以重新表述为:在任何时刻,对于每种车型,该车型最多有一个订单。nlog(n)的订单建议您使用快速排序或合并排序对某些内容进行排序。如果您在开始时间对订单进行排序会怎么样?每种车型有x辆车,即使排序后,我仍然需要运行整个订单列表。即使订单列表已排序,我也需要浏览整个Carlist,听起来很棒<代码>检查每个订单你从哪里得到O(n log(n)+k)对我来说似乎O(n log(n))在车型上有一个循环。该循环会产生与车型数量成比例的轻微开销(
    k
    )。