Я попробовал решить задачу Найдите ученика, который заменит мел на 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 Правильно найти мел, оставшийся после максимального количества полных проходов через n учеников.




Обратите внимание, что в постановке задачи указано, что количество оставшегося мела строго меньше, чем количество мела, необходимое ученику 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)
Добро пожаловать в ТАК! Пожалуйста, прочитайте Как спросить . Подробности, относящиеся к вашей проблеме, должны быть включены в сам вопрос, а не с гиперссылкой на сайт конкурса программистов. Также Пожалуйста, не загружайте изображения кода/данных/ошибок.