我们正在为呼叫中心实施密度报告。结果必须显示为表格,每天有一行显示当天同时活动的最大呼叫数。
我们正在构建 UI 背后的库。合约指定我们接收当天的通话次数和两个整数数组,一个是开始时间,一个是每次通话的结束时间,例如:
对于给定的一天,只收到两个电话:一个从时间 20 到 30,另一个从 10 到 20。同时呼叫的最大数量是 1。
另一方面,再过一天,也接到两个电话,一个从 10 到 45,另一个从 15 到 40,那么同时呼叫的最大数量是 2。
Web服务的合同是这样的
public static int GetMaxDensity(int N, int[] X, int[] Y)
数据看起来像这样(假设当天接到 3 个电话)。第一个从 10 到 25,第二个从 12 到 30,第三个从 20 到 23。
N = 3,
X = {10, 12, 20}
Y = {25, 30, 23}
回报必须是:3。
我已经实现了这个解决方案:
public static int GetMaxDensity(int N, int[] X, int[] Y)
{
int result = 0;
for (int i = 0; i < N; i++)
{
int count = 0, t = X[i];
for (int j = 0; j < N; j++)
{
if (X[j] <= t && t < Y[j])
count++;
}
result = Math.max(count, result);
}
return result;
}
当呼叫数量高达 1000(周末)但在工作日内数量很大并且计算时间很长(> 5 分钟)时,它的效果很好。我现在的原因可能是我的解决方案是使用两个嵌套循环,但我对复杂算法没有太多经验,所以我的问题是:
鉴于我只需要同时调用的最大数量(不是时间也不是调用者),如果有一个,这可能是执行此计算的更快方法。