Leetcode — Найдите ученика, который заменит мел

Я попробовал решить задачу Найдите ученика, который заменит мел на LeetCode.

В классе n учеников с номерами от 0 до n - 1. Учитель дает каждому ученику задачу, начиная с ученика с номером 0, затем с ученика с номером 1 и так далее, пока учитель не достигнет номера ученика с номером n - 1. После этого преподаватель возобновит процесс, снова начиная с ученика номер 0.

Вам дан массив целых чисел с индексом 0 и целое число k. Изначально имеется k кусочков мела. Когда ученику номер i предлагается решить задачу, он будет использовать кусочки мела [i] для решения этой задачи. Однако если текущее количество кусочков мела строго меньше, чем chalk[i], то ученику номер i будет предложено заменить мел.

Верните индекс ученика, который заменит кусочки мела.

Я думал, что мое решение должно работать, но есть тестовый пример, где оно не работает, и я не понимаю, почему.

Вот тестовый пример.

И вот мой код:

class Solution {
    public int chalkReplacer(int[] chalk, int k) {
        return getChalkReplacer(chalk, k);
    }
    public int getChalkReplacer(int[] chalk, int remaining_chalk){
        int chalk_sum = 0;
        for(int i=0; i<chalk.length; i++){
            chalk_sum += chalk[i];
            if (remaining_chalk - chalk_sum <= 0 || chalk[i] > remaining_chalk){
                return i;
            }
        }
        return getChalkReplacer(chalk, remaining_chalk % chalk_sum);
    }
}
remaining_chalk % chalk_sum в принципе выглядит неправильно - почему вы выполняете операцию по модулю (которая дает вам остаток от деления)?
UnholySheep 06.07.2024 22:48

@UnholySheep Правильно найти мел, оставшийся после максимального количества полных проходов через n учеников.

Unmitigated 06.07.2024 23:50
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Обратите внимание, что в постановке задачи указано, что количество оставшегося мела строго меньше, чем количество мела, необходимое ученику i.

если текущее количество мелков строго меньше chalk[i], то ученику номер i будет предложено заменить мел

Таким образом, проблема здесь в утверждении if.

if (remaining_chalk - chalk_sum <= 0 || chalk[i] > remaining_chalk)

chalk[i] > remaining_chalk является избыточным и его следует опустить. Вполне допустимо, чтобы remaining_chalk было равно chalk_sum, поэтому <= следует заменить на <.

if (remaining_chalk - chalk_sum < 0)

Это можно просто переставить:

if (remaining_chalk < chalk_sum)

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