Algorithmus-Duplikate in sortiertem Array löschen (Doppelzeiger-Methode)

LeetCode-Adresse

Frage:
Bei einem sortierten Array müssen Sie die wiederholten Elemente an Ort und Stelle löschen, damit jedes Element nur einmal angezeigt wird, und die neue Länge des entfernten Arrays zurückgeben.

Verwenden Sie keinen zusätzlichen Array-Speicherplatz. Sie müssen das Eingabearray an Ort und Stelle ändern und O (1) zusätzlichen Speicherplatz verwenden.

Beispiel 1:

给定数组 nums = [1,1,2], 

函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 

你不需要考虑数组中超出新长度后面的元素。

Beispiel 2:

给定 nums = [0,0,1,1,1,2,2,3,3,4],

函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。

你不需要考虑数组中超出新长度后面的元素。

Realisierungsidee:
Standardmäßig stehen zwei Personen, eine p, eine q, q vor p,

  • Wenn die p-Position und der q-Positionswert nicht gleich sind, treten beide vor (p und q liegen nicht nebeneinander, sodass Sie den q-Positionswert der p + 1-Position zuweisen müssen, und dann beide machen einen Schritt vorwärts; p und q liegen nebeneinander, müssen nicht neu zugewiesen werden, verwenden Sie einfach beide, um vorwärts zu treten).
  • Wenn es dasselbe ist, bewegt sich p nicht und q einen Schritt vorwärts;
  • Bis p zu Ende geht;

leisten:

class Solution {
    
    
	public int removeDuplicates(int[] nums) {
    
    
		int p = 0;
		int q = 1;
		while (q < nums.length) {
    
    
			if (nums[p] != nums[q]) {
    
    
				if ((p + 1) < q) {
    
    
					nums[p + 1] = nums[q];
				}
				p++;
			}
			q++;
		}
		return p + 1;
	}
}

Nur für diesen Datensatz, wenn es ein Problem mit dem Code gibt oder es eine bessere Möglichkeit gibt, ihn zu implementieren, hinterlassen Sie bitte eine Nachricht, danke

Ich denke du magst

Origin blog.csdn.net/nongminkouhao/article/details/107957454
Empfohlen
Rangfolge