Sobes.tech
Senior

Angenommen, es gibt ein sortiertes Array von Zahlen, das doppelte Elemente enthält. Entfernen Sie die Duplikate in-place (direkt im ursprünglichen Array) und geben Sie die Größe des resultierenden Arrays zurück. Beispiel: Eingabe: nums = [0,0,1,1,1,2,2,3,3,4] Ausgabe: 5, nums = [0,1,2,3,4,_,_,_,_,_] Erläuterung: In diesem Array gibt es 5 eindeutige Elemente. Platzieren Sie sie in den ersten fünf Positionen des ursprünglichen Arrays und geben Sie die Zahl 5 zurück. Die nachfolgenden Elemente im ursprünglichen Array können beliebig sein.

sobes.tech KI

Antwort von AI

Um doppelte Elemente aus einem sortierten Array in-place zu entfernen, können zwei Zeiger verwendet werden: einer zum Durchlaufen des Arrays, der andere für die Position, an der die einzigartigen Elemente geschrieben werden.

Idee:

  • Initialisieren Sie writeIndex mit 1 (das erste einzigartige Element ist bereits an Ort und Stelle).
  • Durchlaufen Sie das Array mit readIndex von 1 bis zum Ende.
  • Wenn das aktuelle Element ungleich dem vorherigen ist, schreiben Sie es in nums[writeIndex] und erhöhen writeIndex.

Am Ende ist writeIndex die Anzahl der einzigartigen Elemente.

Beispiel in 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
}

// Verwendung:
// 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]