HackerRank Customer Service Capacity

Hi, today I would like to show you how to solve the code puzzle with the time line. Where you have to in O(n) determine how many maximal events happen the same time… I hope you like it ;-). I looked on the Internet and there is no correct solution for this problem in my opinion, so far. So I decided to write on my own this solution and share with my readers… On the Internet there is one close to work, but it is quite complex, to solve that puzzle efficient, but I am not 100% sure… The added value of this solution here is the bunch of tests I made… Thanks for reading!

```/*
HackerRank Customer Service Capacity

Problem: Determine how many people need to hire

Input specs:
- first line contains the current number of customer
service executives
- second line contains a number of records in data set
- next linkes contains a pair of timestamps representing
a start of call and end of call

Input demo:
1
3
1481222000 1481222020
1481222000 1481222040
1481222030 1481222035

Output demo:
Expected result (number of additional customer service
executives):
1
*/
using System;
using System.Collections.Generic;

namespace CustomerServiceCapacitySandbox
{
class Solution
{
// HackeRank Solution
static int numberOfAgentsToAdd(int numberOfAgents, int[][] callsTimes)
{
var set = new SortedList<int, int>();
for (int i = 0; i < callsTimes.Length; ++i)
{
var b = callsTimes[i][0];
var e = callsTimes[i][1];

if (!set.ContainsKey(b)) set.Add(b, +1); else set[b]++;
if (!set.ContainsKey(e)) set.Add(e, -1); else set[e]--;
}
var max = 0;
var num = 0;
foreach (var val in set.Values)
{
num += val;
if (max < num) max = num;
}
return max - numberOfAgents;
}

static int Test00()
{
var numOfAgent = 1;
var callsTimes = new int[3][];

callsTimes[0] = new int[2];
callsTimes[0][0] = 1481222000;
callsTimes[0][1] = 1481222020;
callsTimes[1] = new int[2];
callsTimes[1][0] = 1481222000;
callsTimes[1][1] = 1481222040;
callsTimes[2] = new int[2];
callsTimes[2][0] = 1481222030;
callsTimes[2][1] = 1481222035;

}

static int Test01()
{
var numOfAgent = 1;
var callsTimes = new int[3][];

callsTimes[0] = new int[2];
callsTimes[0][0] = 1481222000;
callsTimes[0][1] = 1481222020;
callsTimes[1] = new int[2];
callsTimes[1][0] = 1481222001;
callsTimes[1][1] = 1481222040;
callsTimes[2] = new int[2];
callsTimes[2][0] = 1481222002;
callsTimes[2][1] = 1481222035;

}

static int Test02()
{
var numOfAgent = 1;
var callsTimes = new int[3][];

callsTimes[0] = new int[2];
callsTimes[0][0] = 1481222000;
callsTimes[0][1] = 1481222010;
callsTimes[1] = new int[2];
callsTimes[1][0] = 1481222020;
callsTimes[1][1] = 1481222030;
callsTimes[2] = new int[2];
callsTimes[2][0] = 1481222040;
callsTimes[2][1] = 1481222050;

}

static int Test03()
{
var numOfAgent = 1;
var callsTimes = new int[3][];

callsTimes[0] = new int[2];
callsTimes[0][0] = 1481222000;
callsTimes[0][1] = 1481222050;
callsTimes[1] = new int[2];
callsTimes[1][0] = 1481222020;
callsTimes[1][1] = 1481222050;
callsTimes[2] = new int[2];
callsTimes[2][0] = 1481222040;
callsTimes[2][1] = 1481222050;

}

static int Test04()
{
var numOfAgent = 1;
var callsTimes = new int[4][];

callsTimes[0] = new int[2];
callsTimes[0][0] = 1481222000;
callsTimes[0][1] = 1481222050;
callsTimes[1] = new int[2];
callsTimes[1][0] = 1481222020;
callsTimes[1][1] = 1481222050;
callsTimes[2] = new int[2];
callsTimes[2][0] = 1481222040;
callsTimes[2][1] = 1481222050;
callsTimes[3] = new int[2];
callsTimes[3][0] = 1481222050;
callsTimes[3][1] = 1481222060;

}

static int Test05()
{
var numOfAgent = 1;
var callsTimes = new int[4][];

callsTimes[0] = new int[2];
callsTimes[0][0] = 1481222000;
callsTimes[0][1] = 1481222050;
callsTimes[1] = new int[2];
callsTimes[1][0] = 1481222020;
callsTimes[1][1] = 1481222050;
callsTimes[2] = new int[2];
callsTimes[2][0] = 1481222040;
callsTimes[2][1] = 1481222050;
callsTimes[3] = new int[2];
callsTimes[3][0] = 1481222045;
callsTimes[3][1] = 1481222060;

}

static void TestRunner(Func<int> test, int expected)
{
int val = 0;
Console.WriteLine(
test.Method.Name + " = {0} -> {1}",
(val = test.Invoke()), val == expected ? "PASS" : "FAIL");
}

static void Main(string[] args)
{
TestRunner(Test00, 1);
TestRunner(Test01, 2);
TestRunner(Test02, 0);
TestRunner(Test03, 2);
TestRunner(Test04, 2);
TestRunner(Test05, 3);

Console.WriteLine("Press any key to continue...");