Рубрики
Без рубрики

Один код в день: Удаление дубликатов из отсортированного массива II

Удалите дубликаты из отсортированного массива II. Помеченный leetcode, java.

Проблема: Leetcode 80 – Удалить дубликаты из отсортированного массива II

Ссылка на проблему: https://leetcode.com/problems/remove-duplicates-from-sorted-array-ii/

Простое описание: Учитывая отсортированный массив, удалите вхождения чисел, которые повторяются более двух раз.

Так, например, данный массив равен [1,1,1,2,2,3]. Здесь 1 повторяется три раза, поэтому нам нужно сохранить только два вхождения одного. 2 повторяется два раза, что удовлетворяет нашим критериям. 3 повторяется только один раз, поэтому он находится в пределах нашего граничного условия. Итак, после того, как мы решили проблему, у нас должен быть наш массив в виде [1, 1, 2, 2, 3] делаем длину массива равной 5. Загвоздка в том, что мы должны изменить фактический входной массив и решить это в O (1) пространственной сложности.

Решение на Java:

class Solution {
    public int removeDuplicates(int[] nums) {
      int n = nums.length;
      int duplicatesAllowed = 2;
      int start = duplicatesAllowed;
      int end = duplicatesAllowed;
      while (end < n) {
        if (nums[start - duplicatesAllowed] != nums[end]) {
          nums[start++] = nums[end];
        }
        end++;
      }
      return start;
    }
}

Таким образом, эта проблема может быть расширена для любого количества разрешенных дубликатов. Нам нужно найти общее решение. Мы считаем, что дубликаты разрешены как два в приведенной выше задаче. У нас есть два указателя start и конец и установите их равными разрешенные дубликаты изначально. Теперь мы всегда проверяем, разрешено ли start - duplicates равно нашему текущему элементу, т.е. nums[end] . Если это не так, то мы обновляем значение nums[start равным nums[end] и увеличиваем указатель start .

Сделав это, мы сможем ограничить количество вхождений чисел меньшим или равным Разрешенные дубликаты .

Эта техника называется “Техника двух указателей”.

Оригинал: “https://dev.to/varunu28/a-leetcode-a-day-remove-duplicates-from-sorted-array-ii-2b0”