мой с циклом for, решение на сайте черед while. написало что мой 1 ms, тот что с сайта получил 0 ms
public int removeDuplicates(int[] nums) {
int i = 1;
int k = 0;
while (nums.length > i) {
if (nums[i] != nums[k]) {
k++;
nums[k] = nums[i];
}
i++;
}
return k + 1;
}
private static int removeDuplicates(int[] nums) {
int j = 0;
for (int i = 1; i < nums.length; i++) {
if (nums[j] != nums[i]) nums[++j] = nums[i];
}
return j + 1;
}
nums.length > i когда i будет равен nums.length, это условие все еще будет истинным. в теле цикла ты обращаешься к nums[i]. когда i = nums.length это будет ошибка, так как у последнего элемента в массиве индекс nums.length - 1. ArrayIndexOutOfBoundsException
Да
Слишком мало замеров. Надо больше измерений на локальной машине с библиотекой для измерения перформанса. Забыл как называется. Тогда можно будет сказать, какой алгоритм быстрее. Но по мат.модели оба алгоритма ~ n
Честно говоря не понял, как минимум тесты все прошло. i не привышает длинну массива нигде
Обсуждают сегодня