Sobes.tech
Senior

Даден е сортиран масив от числа, който съдържа дублиращи се елементи. Трябва да премахнете дублиращите се елементи на място (директно в оригиналния масив) и да върнете размера на получения масив. Пример: Вход: nums = [0,0,1,1,1,2,2,3,3,4] Изход: 5, nums = [0,1,2,3,4,_,_,_,_,_] Обяснение: В този масив има 5 уникални елемента. Поставете ги на първите пет позиции в оригиналния масив и върнете числото 5. Следващите елементи в оригиналния масив могат да бъдат каквито и да е.

sobes.tech AI

Отговор от AI

За да премахнете дублиращите се елементи от сортиран масив на място, можете да използвате два указателя: един за обхождане на масива, друг за позицията за записване на уникалните елементи.

Идея:

  • Инициализирайте writeIndex на 1 (първият уникален елемент вече е на мястото си).
  • Обходете масива с readIndex от 1 до края.
  • Ако текущият елемент не е равен на предходния, запишете го в nums[writeIndex] и увеличете writeIndex.

В крайна сметка, writeIndex ще бъде броят на уникалните елементи.

Пример на Go:

func removeDuplicates(nums []int) int {
    if len(nums) == 0 {
        return 0
    }
    writeIndex := 1
    for readIndex := 1; readIndex < len(nums); readIndex++ {
        if nums[readIndex] != nums[readIndex-1] {
            nums[writeIndex] = nums[readIndex]
            writeIndex++
        }
    }
    return writeIndex
}

// Използване:
// nums := []int{0,0,1,1,1,2,2,3,3,4}
// length := removeDuplicates(nums)
// fmt.Println(length) // 5
// fmt.Println(nums[:length]) // [0 1 2 3 4]