Frage: In einem zweidimensionalen Array wird jede Zeile in aufsteigender Reihenfolge von links nach rechts und jede Spalte in aufsteigender Reihenfolge von oben nach unten sortiert. Bitte vervollständigen Sie eine Funktion, geben Sie ein solches zweidimensionales Array und eine Ganzzahl ein und bestimmen Sie, ob das Array die Ganzzahl enthält.
Testpunkte: Bei dieser Frage geht es hauptsächlich darum, die beiden angegebenen Bedingungen, Zeileninkrement und Spalteninkrement, gut zu nutzen, Daten auszuschließen, die definitiv ungeeignet sind, und die Daten so weit wie möglich zu durchlaufen der Reduzierung.
Array-Beispiele sind wie folgt:
1 | 2 | 8 | 9 |
2 | 4 | 9 | 12 |
4 | 7 | 10 | 13 |
6 | 8 | 11 | 15 |
Am effektivsten bei der Lösung eines komplexen Problems Der Weg besteht darin, mit der Analyse spezifischer Probleme zu beginnen.
Durch Beobachtung
1. Wenn der Anfang der Spalte größer als die gesuchte Zahl ist, befindet sich die gesuchte Zahl nicht in dieser Spalte und Sie können sie beschneiden Diese Spalte direkt;
Die Ergebnisse sind wie folgt:
1 | 2 |
2 | 4 |
4 | 7 |
6 | 8 |
2 Nach dem Bereinigen der Spalten können Sie feststellen, dass die Zahl am Ende der Zeile kleiner ist als die gesuchte Zahl, dann muss die gesuchte Zahl auch nicht in dieser Zeile sein
Das Ergebnis ist wie folgt:
4 | 7 |
6 | 8 |
3. Auf diese Weise werden die Daten in die kleinstmögliche Anzahl zerlegt und dann werden die Daten durchlaufen und durchsucht.
Der Code lautet wie folgt:
<?php /* $data 数组 $number 查找的数 $rows 数组的行数 $columns 数组的列数 */ function inArray($data,$number,$rows,$columns) { $row=0; $column=$columns-1; $first=true; while($row<$rows&&$column>=0) { if($data[$row][$column]>$number&&$first) { $column--; //echo $column.','; } if($data[$row][$column]<$number) { $first=false; $row++; //echo $row.','; //如果查找的数大于数组中的所有元素,那么就遍历完所有的行后退出 //continue是防止这种情况的出现,会和第四个条件冲突 continue; } if($data[$row][$column]==$number) { return true; } if($data[$row][$column]>$number&&!$first) { break; } } for($i=$row;$i<$rows;$i++) { for($j=0;$j<$column;$j++) { if($data[$i][$j]==$number) { return true; } } } return false; } $a=array(array(1,2,8,9),array(2,4,9,12),array(4,7,10,13),array(6,8,11,15)); var_dump(inArray($a,7,4,4)); var_dump(inArray($a,101,4,4));
Urheberrechtserklärung: Dieser Artikel ist ein Originalartikel des Bloggers und darf nicht reproduziert werden ohne die Erlaubnis des Bloggers.
Das Obige stellt den Array-Suchalgorithmus vor, bei dem die Zeilenelemente von klein nach groß und die Spaltenelemente von klein nach groß zunehmen, einschließlich des relevanten Inhalts. Ich hoffe, er wird für Freunde hilfreich sein, die sich für PHP-Tutorials interessieren.