Array-Suchalgorithmus mit von klein nach groß ansteigenden Zeilenelementen und von klein nach groß ansteigenden Spaltenelementen

WBOY
Freigeben: 2016-08-08 09:22:04
Original
1122 Leute haben es durchsucht

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.&#39;,&#39;;
			//如果查找的数大于数组中的所有元素,那么就遍历完所有的行后退出
			//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));
Nach dem Login kopieren

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.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage