Sobes.tech
Senior

Dotots sakārtots skaitļu masīvs, kurā ir dublēti elementi. Jānoņem dublēti elementu vietā (tieši sākotnējā masīvā) un jāatgriež iegūtā masīva izmērs. Piemērs: Ievade: nums = [0,0,1,1,1,2,2,3,3,4] Izvade: 5, nums = [0,1,2,3,4,_,_,_,_,_] Skaidrojums: Šajā masīvā ir 5 unikāli elementi. Novietojiet tos pirmajās piecās pozīcijās un atgrieziet skaitli 5. Nākamie elementi sākotnējā masīvā var būt jebkādi.

sobes.tech AI

Atbilde no AI

Lai noņemtu dublikātus no sakārtota masīva vietā, var izmantot divus rādītājus: vienu masīva pārlūkošanai, otru unikālo elementu ierakstīšanai.

Ideja:

  • Inicializējiet writeIndex uz 1 (pirmais unikālais elements jau ir vietā).
  • Pārlūkojiet masīvu ar readIndex no 1 līdz beigām.
  • Ja pašreizējais elements atšķiras no iepriekšējā, ierakstiet to nums[writeIndex] un palieliniet writeIndex.

Rezultātā writeIndex būs unikālo elementu skaits.

Piemērs Go valodā:

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
}

// Lietošana:
// 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]