Получите Прекращение из-за тайм-аута в новогоднем хаосе только с Objective-C - PullRequest
0 голосов
/ 30 октября 2018

Я только что реализовал алгоритм в вопросе ранга хакера Новогодний хаос на двух языках Java и Objective-C. Реализация в Java прошла все тестовые случаи, но реализация Objective C получила Завершена из-за тайм-аута и не может пройти тестовые примеры 6–12. Что может быть неправильным в моем коде в Objective-C, поскольку алгоритм корректен и работает в Java? Вот мои коды java8:

static void minimumBribes(int[] q) {

    int count = 0 ;

    int midOfThree = Integer.MAX_VALUE;
    int maxOfThree =  Integer.MAX_VALUE;
    int minOfThree =  Integer.MAX_VALUE ;

    for(int i=q.length-1 ; i >= 0 ; i--){
        if((q[i]-i) > 3 ) {
            System.out.println("Too chaotic");
            return;
        }
        else{
            if(q[i] > maxOfThree){
                 System.out.println("Too chaotic");
                 return;
            }
            else if(q[i] > midOfThree){ 
                count=count+2;
            }
            else if(q[i] > minOfThree){
                count=count+1;
            }

            if(q[i]<minOfThree){
                maxOfThree=midOfThree;
                midOfThree=minOfThree;
                minOfThree = q[i];
            }
            else if(q[i]<midOfThree){
                maxOfThree=midOfThree;
                midOfThree = q[i];
            }
            else if(q[i]<maxOfThree){
                maxOfThree = q[i];
            }
        }
    }
    System.out.println(count);
}

А вот реализация в Objective-C:

- (void) minimumBribes:(NSArray *)q {
int count = 0;
int midOfThree = INT_MAX;
int maxOfThree = INT_MAX;
int minOfThree = INT_MAX;

for (long i = q.count - 1; i >= 0; i--) {
    int value = [q[i] intValue];
    if (value - i > 3) {
        printf("Too chaotic\n");
        return;
    }else {
        if(value > maxOfThree){
            printf("Too chaotic\n");
            return;
        }
        else if(value > midOfThree){ 
            count=count+2;
        }
        else if(value > minOfThree){ 
            count=count+1;
        }

        if(value<minOfThree){
            maxOfThree=midOfThree;
            midOfThree=minOfThree;
            minOfThree = value;
        }
        else if(value<midOfThree){
            maxOfThree=midOfThree;
            midOfThree = value;
        }
        else if(value < maxOfThree){
            maxOfThree = value;
        }

    }
}
printf("%d\n", count);

}

Это описание проблемы:

Это Новый год, и все в очереди за страной чудес американские горки! Есть много людей в очереди, и каждый человек носит наклейку с указанием своей начальной позиции в очереди. Начальные позиции увеличиваются на от передней линии до спина.

Любой человек в очереди может подкупить человека прямо перед ним поменять позиции. Если два человека меняются местами, они все равно носят та же наклейка, обозначающая их оригинальные места в линейке. Один человек может подкупить не более двух других. Например, если и взятки, очередь будет выглядеть так:.

Очарованный этой хаотичной очередью, вы решаете, что должны знать минимум количество взяток, которые имели место, чтобы получить очередь в ее текущем состояние!

Описание функций

Завершите функцию минимальной взятки в редакторе ниже. Он должен распечатать целое число, представляющее минимальное количество необходимых взяток, или слишком хаотично, если конфигурация линии невозможна.

MinimBribes имеет следующие параметры:

q: массив целых чисел. Формат ввода

Первая строка содержит целое число, количество тестовых случаев.

Каждая из следующих пар строк выглядит следующим образом: - Первая строка содержит целое число, количество людей в очереди - Вторая строка содержит целые числа, разделенные пробелами, которые описывают конечное состояние очереди.

Формат вывода

Выведите целое число, обозначающее минимальное количество взяток, необходимое для получения очередь в свое конечное состояние. Печатать Слишком хаотично, если состояние недействительным, то есть требуется, чтобы человек подкупил больше, чем люди.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...