
Получен целочисленный массив nums и целое значение val
Нужно удалить все вхождения val в nums на месте (in-place). Относительный порядок элементов может быть изменен.
Поскольку в некоторых языках невозможно изменить длину массива, вместо этого вы должны поместить результат в первую часть массива nums.
Более формально: если после удаления дубликатов осталось k элементов, то первые k элементов nums должны содержать конечный результат. Не имеет значения, что вы оставляете за пределами первых k элементов.
Верните k после размещения конечного результата в первых k слотах nums
Не выделяйте дополнительное пространство для другого массива. Нужно сделать задание, изменив входной массив на месте с помощью O(1) дополнительной памяти..
Традиционная экспертиза
Эксперт протестирует ваше решение с помощью следующего кода:
int[] nums = [...]; // Input array
int val = ...; // Значение, которое нужно удалить
int[] expectedNums = [...]; // Ожидаемый ответ правильного размера.
// Отсортированный и не содержащий элементов со значением `val`.
int k = removeElement(nums, val); // Вызов предложенной реализации
assert k == expectedNums.length;
sort(nums, 0, k); // Sort the first k elements of nums
for (int i = 0; i < actualLength; i++) {
assert nums[i] == expectedNums[i];
}
Если все утверждения пройдут, решение будет считаться принятым.
Входные данные: nums = [3,2,2,3], val = 3
Результат: 2, nums = [2,2,,]
Пояснение: Функция должна возвратить k = 2, причем первые два элемента nums равны 2. Не имеет значения, что вы оставляете за пределами возвращаемого k (следовательно, они являются символами подчеркивания).
Входные данные: nums = [0,1,2,2,3,0,4,2], val = 2
Результат: 5, nums = [0,1,4,0,3,,,_]
Пояснение: Функция должна возвратить k = 5, причем первые пять элементов nums содержат 0, 0, 1, 3 и 4. Обратите внимание, что пять элементов могут быть возвращены в любом порядке. Не имеет значения, что вы оставляете за пределами возвращаемого k (следовательно, они являются символами подчеркивания).
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int len = nums.size(), k = 0;
for(int i = 0; i < len; i++) {
if(nums[i] != val) {
nums[k++] = nums[i];
}
}
return k;
}
};