static void minimumBribes(int[] q)
{
Int32 TotalCount = 0;
bool blnSuccess = true;
Int32[] size = Ordering(q);
for (int intI = 0; intI < q.Length; intI++)
{
Int32 Tempvariable = 0;
Int32 TooChaotic = 0;
Int32 index = Index(size,q[intI]);
do
{
if (q[intI] != size[intI])
{
Tempvariable = size[index];
size[index] = size[index - 1];
size[index - 1] = Tempvariable;
index = index - 1;
TooChaotic = TooChaotic + 1;
if (TooChaotic > 2)
{
break;
}
TotalCount = TotalCount + 1;
}
} while (q[intI] != size[intI]);
if (TooChaotic > 2)
{
Console.WriteLine("Too chaotic");
blnSuccess = false;
break;
}
}
if (blnSuccess)
{
Console.WriteLine(TotalCount);
}
}
static int[] Ordering(int[] z)
{
int[] r = new int[z.Length];
r = z.OrderBy(x => x).ToArray();
return r;
}
static int Index(int[] z,int integer)
{
for (int intI = 0; intI < z.Length; intI++)
{
if(z[intI]== integer)
{
return intI;
}
}
return 0;
}
Этот код работает нормально, но время его выполнения слишком велико. Я получаю "Прекращено из-за тайм-аута" в HackerRank. Тем не менее, решение отлично работает на локальном компьютере, но это занимает больше времени. Ссылка на проблему: https://www.hackerrank.com/challenges/new-year-chaos/problem.
Пример ввода
2 (количество тестовых случаев)
5 (количество человек в очереди)
2 1 5 3 4 (n разделенных пробелом целых чисел, описывающих конечное состояние очереди)
5 (количество человек в очереди)
2 5 1 3 4 (n разделенных пробелом целых чисел, описывающих конечное состояние очереди).
Он должен вывести целое число, представляющее минимальное количество необходимых взяток, или слишком хаотично, если конфигурация линии невозможна.
Выход 3
Слишком хаотично
Вопрос:
Как я могу уменьшить его время выполнения? В настоящее время я использую массив.
Я решил это несколько недель назад, это мое решение проблемы (100%)
static void minimumBribes(int[] q) {
int bribe = 0;
bool chaotic = false;
int n = q.Length;
for(int i = 0; i < n; i++)
{
if(q[i]-(i+1) > 2)
{
chaotic = true;
break;
}
for (int j = Math.Max(0, q[i]-1-1); j < i; j++)
if (q[j] > q[i])
bribe++;
}
if(chaotic)
Console.WriteLine("Too chaotic");
else
Console.WriteLine(bribe);
}
Вам не нужны никакие другие методы, кроме тех, которые предусмотрены задачей
int j = Math.Max(0, q[i]-1-1);
значит? Зачем ты это делаешь?