Senior
Δεδομένου ενός ταξινομημένου πίνακα αριθμών που περιέχει διπλότυπα στοιχεία. Πρέπει να αφαιρέσετε τα διπλότυπα in-place (ακριβώς στον αρχικό πίνακα) και να επιστρέψετε το μέγεθος του προκύπτοντος πίνακα. Παράδειγμα: Είσοδος: nums = [0,0,1,1,1,2,2,3,3,4] Έξοδος: 5, nums = [0,1,2,3,4,_,_,_,_,_] Επεξήγηση: Σε αυτόν τον πίνακα υπάρχουν 5 μοναδικά στοιχεία. Τοποθετήστε τα στις πρώτες πέντε θέσεις του αρχικού πίνακα και επιστρέψτε τον αριθμό 5. Τα επόμενα στοιχεία στον αρχικό πίνακα μπορεί να είναι οτιδήποτε.
sobes.tech AI
Απάντηση από AI
Για να αφαιρέσετε διπλότυπα από έναν ταξινομημένο πίνακα in-place, μπορείτε να χρησιμοποιήσετε δύο δείκτες: έναν για την περιήγηση στον πίνακα και έναν για τη θέση εγγραφής των μοναδικών στοιχείων.
Ιδέα:
- Αρχικοποιήστε το
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]