Диагональная разница использования Java 7 в Hackerrank

Я новичок в хакерранке, чтобы решить эту проблему алгоритма Диагональная разница, я придумал решение, но оно показывает ошибку времени выполнения, может ли кто-нибудь сказать, какая часть я написал неправильно, спасибо.

 /*
 * Complete the diagonalDifference function below.
 */
static int diagonalDifference(int[][] a) {
    /*
     * Write your code here.
     */
    int sum1=0;
    int sum2=0;
    int n = a[0].length;
    for(int i=0; i<n; i++){
    sum1 += a[i][i];
    sum2 += a[n-i][i];
    }
    return Math.abs(sum1-sum2);
}

При вычислении sum2 вы пытаетесь получить доступ к индексу > n-1, когда i=0. Так что измените его на sum2 += a[n-i-1][i];

Sanket Makani 13.04.2018 11:09

Вы правы, я промахнулся до минус 1, спасибо!

f.c 13.04.2018 11:15
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
744
3

Ответы 3

Проблема в этой строке: sum2 += a[n-i][i];

Для i=0 это будет a[n][0], а индекс находится между 0 to n-1; это приведет к ошибке выполнения.

Ответ на ваш вопрос, sum2 += a[n-i][i]; здесь i = 0; поэтому вы пытаетесь получить доступ к индексу, которого нет в массиве. это должен быть sum2 += a[n-i-1][i]

Вот как я это сделал в java 8. Вы сможете понять это и очень похоже на java 7.

    static int diagonalDifference(int[][] a, int n) {
        //I just edited this method
        int x=0, y=0,z,h=0;
        for(int i = 0; i < n; i++){
            x = x + a[i][i];
        }
        for(int j = n-1; j >= 0; j-- ){
            y = y + a[h][j];
            h++;
        }
        //System.out.println(x);
        //System.out.println(y);
        if (x>y){
            z=x-y;
        }else{
            z=y-x;
        }
        return(z);
    }

замените sum2 + = a [n-i] [i] на sum2 + = a [n-i-1] [i]. Это решит вашу проблему.

Для подробного объяснения вы можете проверить приведенную ниже ссылку -

https://thewikihow.com/video_f6bTIsj9ne8

Существует множество сайтов и репозиториев git hub, где вы можете найти решения hackerRank для большинства проблем.

Но я бы порекомендовал https://github.com/Java-aid/Hack ... который поддерживается мной. Здесь я могу быть предвзятым, но поверьте мне, вы найдете этот репозиторий полезным.

В этот репозиторий я также добавляю видеоурок, который вы не найдете ни в одном из репозиториев git-hub в Интернете.

Вот пример учебника - https://thewikihow.com/video_gDltV7pJw7A

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

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

Не забудьте поделиться своим мнением с другими, если вам нравятся мои работы. :)

Другие вопросы по теме