Frage: Es gibt zwei sortierte Arrays A und B. Der verbleibende Platz von Array A reicht gerade aus, um B aufzunehmen. Bitte implementieren Sie eine Funktion, um alle Zahlen in B in A einzufügen und alle Zahlen werden sortiert. von.
Die ursprüngliche Idee vieler Menschen besteht darin, einfach einzufügen, was heftig genug ist, direkt vom Anfang bis zum Ende in A zu durchlaufen, eine geeignete Position zu finden und alle nachfolgenden Elemente zu verschieben, um Platz für eines zu schaffen Das Ausfüllen neu eingefügter Zahlen ist die ineffizienteste Methode.
Eine bessere Möglichkeit, das Gegenteil zu tun, besteht darin, die Zahlen in A und B vom Ende beginnend zu vergleichen und die größere Zahl an das Ende von A zu kopieren.
Diese Lösung kann auch auf das Ersetzen von Zeichenfolgen angewendet werden, wenn Sie die Leerzeichen in der Zeichenfolge durch „ “ ersetzen möchten (in der Netzwerkprogrammierung, wenn die URL Sonderzeichen enthält, z B. Leerzeichen und „#“, wird es auf der Serverseite möglicherweise nicht korrekt analysiert und muss daher konvertiert werden. Die Konvertierungsregel besteht darin, nach „%“ eine zweistellige hexadezimale Darstellung des ASCII-Codes hinzuzufügen, beispielsweise ein Leerzeichen . Der ASCII-Code ist 32, also ist der Hexadezimalwert 20, der in . umgewandelt wird. Wenn Sie die Zeichenfolge vom Anfang bis zum Ende durchlaufen, ist dies der Fall Anzahl der Leerzeichen vom Anfang an, beantragen Sie mehr Speicher für die Zeichenfolge, kopieren Sie sie dann vom Ende und ersetzen Sie sie, wenn sie auf ein Leerzeichen stößt, wodurch die Anzahl der Bewegungen effektiv reduziert werden kann .
Der Code für die Array-Zusammenführung lautet wie folgt:
<?php /* $data1 数组A $data2 数组B $num1 数组A的有效元素个数 */ function merge(&$data1,$data2,$num1) { $total=count($data1); $num2=count($data2); while($num1>0&&$num2>0) { if($data1[$num1-1]>$data2[$num2-1]) { $data1[$total-1]=$data1[$num1-1]; $total--; $num1--; } else { $data1[$total-1]=$data2[$num2-1]; $total--; $num2--; } } if($num2>0) { while($total>0&&$num2>0) { $data1[$total-1]=$data2[$num2-1]; $total--; $num2--; } } } $a=array(1,3,5,7,9,0,0,0,0,0); $b=array(2,4,6,8,10); merge($a,$b,5); print_r($a);
Das Obige stellt die Zusammenführung zweier geordneter Arrays vor, einschließlich Aspekten des Inhalts. Ich hoffe, dass es für Freunde hilfreich sein wird, die sich für PHP-Tutorials interessieren.