«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Объяснение элемента удаления Leetcode Day

Объяснение элемента удаления Leetcode Day

Опубликовано 30 июля 2024 г.
Просматривать:921

Leetcode Day Remove Element Explained

Проблема в следующем:

Дано целочисленный массив nums и целое число val, удалить все вхождения val в nums in-place. Порядок элементов может быть изменен. Затем верните количество элементов в виде nums, которые не равны val.

Учитывайте количество элементов в nums, которые не равны val be k. Чтобы вас приняли, вам нужно сделать следующее:

  • Измените массив nums так, чтобы первые k элементов nums содержали элементы, не равные val. Остальные элементы nums, как и размер nums, не важны.
  • Вернуть 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).

Вот как я это решил:

Чтобы решить эту проблему, я использовал две основные стратегии:

  1. Замена на месте: вместо создания нового массива для хранения элементов, не равных val, используйте те же числа массива, чтобы перезаписать элементы, которые необходимо удалить.
  2. Техника двух указателей: один указатель (i) проходит по каждому элементу массива, а другой указатель (k) отслеживает позицию, в которой должен быть помещен следующий незначительный элемент.
  • Сначала инициализируйте указатель k и установите его в 0. Это позволит отслеживать позицию, в которой должен быть помещен следующий не-val элемент.
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:       
    k = 0
  • Перебор массива чисел.
  • Проверьте, отличается ли текущий элемент nums[i] от val, чтобы отслеживать k.
  • Если это так, переместите элемент nums[i] на k-ю позицию и увеличьте k на 1, чтобы обновить позицию для следующего элемента, не являющегося val.
for i in range(len(nums)):
    if nums[i] != val:
        nums[k] = nums[i]
        k  = 1
  • Верните k, то есть количество элементов, не равных val.
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
Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/simona-cancian/leetcode-day-8-remove-element-explained-212a?1 Если есть какие-либо нарушения, пожалуйста, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3