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]