Проблема в следующем:
Дано целочисленный массив nums и целое число val, удалить все вхождения val в nums in-place. Порядок элементов может быть изменен. Затем верните количество элементов в виде nums, которые не равны val.
Учитывайте количество элементов в nums, которые не равны val be k. Чтобы вас приняли, вам нужно сделать следующее:
Индивидуальный судья:
Судья проверит ваше решение с помощью следующего кода:
int[] nums = [...]; // Input array int val = ...; // Value to remove int[] expectedNums = [...]; // The expected answer with correct length. // It is sorted with no values equaling val. int k = removeElement(nums, val); // Calls your implementation assert k == expectedNums.length; sort(nums, 0, k); // Sort the first k elements of nums for (int i = 0; iЕсли все утверждения пройдены, ваше решение будет принято.
Пример 1:
Input: nums = [3,2,2,3], val = 3 Output: 2, nums = [2,2,_,_] Explanation: Your function should return k = 2, with the first two elements of nums being 2. It does not matter what you leave beyond the returned k (hence they are underscores).Пример 2:
Input: nums = [0,1,2,2,3,0,4,2], val = 2 Output: 5, nums = [0,1,4,0,3,_,_,_] Explanation: Your function should return k = 5, with the first five elements of nums containing 0, 0, 1, 3, and 4. Note that the five elements can be returned in any order. It does not matter what you leave beyond the returned k (hence they are underscores).Вот как я это решил:
Чтобы решить эту проблему, я использовал две основные стратегии:
- Замена на месте: вместо создания нового массива для хранения элементов, не равных val, используйте те же числа массива, чтобы перезаписать элементы, которые необходимо удалить.
- Техника двух указателей: один указатель (i) проходит по каждому элементу массива, а другой указатель (k) отслеживает позицию, в которой должен быть помещен следующий незначительный элемент.
class Solution: def removeElement(self, nums: List[int], val: int) -> int: k = 0
for i in range(len(nums)): if nums[i] != val: nums[k] = nums[i] k = 1
return k
Вот готовое решение:
class Solution: def removeElement(self, nums: List[int], val: int) -> int: k = 0 for i in range(len(nums)): if nums[i] != val: nums[k] = nums[i] k = 1 return k
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3