[Von LeetCode geschriebene Testfrage] 26. Löschen Sie Duplikate in einem geordneten Array

Problembeschreibung 

Wenn die Anzahl der Array-Nummern nicht streng aufsteigend ist , löschen Sie bitte die vorhandenen wiederholten Elemente, sodass jedes Element nur einmal vorkommt, und geben Sie nach dem Löschen die neue Länge des Arrays zurück. Die relative Reihenfolge der Elemente   sollte konsistent bleiben. Geben Sie dann die Anzahl der eindeutigen Elemente in Zahlen zurück.

Wenn man bedenkt, dass die Anzahl der eindeutigen Elemente von nums k ist , müssen Sie Folgendes tun, um sicherzustellen, dass Ihre Lösung bestanden werden kann:

  • Ändern Sie das Array nums so, dass die ersten k Elemente von nums eindeutige Elemente enthalten, angeordnet in der Reihenfolge, in der sie ursprünglich in nums erschienen. Die übrigen Elemente von Nums sind für die Größe von Nums unwichtig.

  • Gib k zurück  .

Beispiel:

Eingabe: Zahlen = [0,0,1,1,1,2,2,3,3,4]
Ausgabe: 5, Zahlen = [0,1,2,3,4]

Ideen zur Problemlösung

  • Nicht strikte Abnahme : Der Schwerpunkt liegt auf nicht strikter Abnahme, daher muss das Wesentliche darin bestehen, dass die letztere Zahl größer oder gleich der vorherigen Zahl sein muss.
  • Methode zur Lösung des Problems : Deduplizierungsalgorithmus und Verwendung von Doppelzeigern.
  • Idee zur Lösung des Problems : Bestimmen Sie, ob die nächste Zahl gleich der vorherigen Zahl ist. Wenn sie gleich sind, bewegen Sie den folgenden Zeiger einen Schritt zurück und beurteilen Sie erneut, ob sie gleich sind. Wenn sie nicht gleich sind, bewegen Sie den vorherigen Zeiger einen Schritt zurück und weisen Sie dann die folgende Nummer dem vorherigen Zeiger zu (wodurch er überlappt). ). ).
  • Illustration dieser Frage :

Code

int removeDuplicates(int* nums, int numsSize) 
{
     int dst=1;int src=0;
     while(dst<numsSize)
     {
         if(nums[dst]==nums[src])
         {
             dst++;
         }
         else
         {
             src++;
             nums[src]=nums[dst];
             dst++;
         }
     }
     return src+1;
}

Guess you like

Origin blog.csdn.net/2301_78131481/article/details/134344182