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]