コールセンターの密度レポートを実装しています。結果は、その日の同時アクティブコールの最大数を示す1日あたりの行を含むテーブルとして表示する必要があります。
UIの背後にライブラリを構築しています。コントラクトは、その日の呼び出しの数と整数の2つの配列を受け取ることを指定しています。1つは各呼び出しの開始時刻と終了時刻です。たとえば、次のようになります。
特定の日に受信されるコールは2つだけです。1つは時間20から30に、もう1つは10から20になります。同時にコールする最大数は1です。
一方、別の日には、10から45までと15から40までの2つのコールも受信され、同時にコールされる最大数は2です。
Webサービスの契約はこちらです
public static int GetMaxDensity(int N, int[] X, int[] Y)
そして、データは次のようになります(その日に受信した3つの呼び出しを想定しています)。1つ目は10から25、2つ目は12から30、3つ目は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分)。私の解決策は2つのネストされたサイクルを使用しているためかもしれませんが、複雑なアルゴリズムの経験があまりないので、私の質問は次のとおりです。
同時に呼び出す最大数(時間や呼び出し元ではない)が必要な場合は、この計算を実行するためのより高速な方法である可能性があります。