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]