План курса / Все задачи / Алгоритмы и структуры данных
Удаление повторов
легко
# решено
Дан массив целых чисел nums, отсортированный в неубывающем порядке. Удалите из него все дубликаты так, чтобы каждый элемент встречался только один раз. Изменения выполняйте в исходном массиве, не создавая новый. Верните изменённый массив, отсортированный по возрастанию.
Пример 1:
Ввод: nums = [1,1,2,2,3,3,4]
Вывод: [1,2,3,4]
Пример 2:
Ввод: nums = [1,1,1,1]
Вывод: [1]
Пример 3:
Ввод: nums = [10]
Вывод: [10]
Ограничения:
len(nums) >= 1
public class Solution {
public static List<int> RemoveDuplicates(List<int> nums) {
// Медленный и быстрый указатели
int p1 = 0;
int p2 = 1;
while (p2 < nums.Count) {
if (!nums[p2].Equals(nums[p1])) {
p1++;
nums[p1] = nums[p2];
}
p2++;
}
// удаляем лишние элементы без выделения дополнительной памяти
nums.RemoveRange(p1 + 1, nums.Count - (p1 + 1));
return nums;
}
}
#include <vector>
using namespace std;
vector<int> removeDuplicates(vector<int> &nums) {
// Медленный и быстрый указатели
int p1 = 0;
int p2 = 1;
while (p2 < nums.size()) {
if (nums[p2] != nums[p1]) {
p1++;
nums[p1] = nums[p2];
}
p2++;
}
// удаляем лишние элементы без выделения дополнительной памяти
nums.resize(p1 + 1);
return nums;
}
package main
func removeDuplicates(nums []int) []int {
// Медленный и быстрый указатели
p1 := 0
p2 := 1
for p2 < len(nums) {
if nums[p2] != nums[p1] {
p1++
nums[p1] = nums[p2]
}
p2++
}
return nums[:p1+1]
}
import java.util.*;
public class Solution {
public List<Integer> removeDuplicates(List<Integer> nums) {
// Медленный и быстрый указатели
int p1 = 0;
int p2 = 1;
while (p2 < nums.size()) {
if (!nums.get(p2).equals(nums.get(p1))) {
p1++;
nums.set(p1, nums.get(p2));
}
p2++;
}
// удаляем лишние элементы без выделения дополнительной памяти
nums.subList(p1 + 1, nums.size()).clear();
return nums;
}
}
from typing import *
def remove_duplicates(nums: List[int]) -> List[int]:
# Медленный и быстрый указатели
p1: int = 0
p2: int = 1
while p2 < len(nums):
if nums[p2] != nums[p1]:
p1 += 1
nums[p1] = nums[p2]
p2 += 1
# удаляем лишние элементы без выделения дополнительной памяти
del nums[p1 + 1:]
return nums
/**
* @param {Array.<number>} nums
* @returns {Array.<number>}
*/
export function removeDuplicates(nums) {
// Медленный и быстрый указатели
let p1 = 0;
let p2 = 1;
while (p2 < nums.length) {
if (nums[p2] !== nums[p1]) {
p1++;
nums[p1] = nums[p2];
}
p2++;
}
// обрезаем массив без создания нового
nums.length = p1 + 1;
return nums;
}