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]