2017-04-04 5 views
-2

Dieses Problem trat bei der Lösung eines Problems in Hackerrank auf. Die Problemstellung lautet here. Wir können dieses Problem mit Java (mit Map und HashMap) oder Python lösen. Aber während ich versuche, das Problem in PHP zu lösen, erhalte ich einen Abbruchfehler. Dies liegt daran, dass die Ausführung des Codes zu lange dauert. Für eine kleinere Dateigröße funktioniert der Code korrekt, aber für eine größere Datei gibt es einen Fehler (Abbruch wegen Zeitüberschreitung). Wie erfolgt das Mapping in PHP? Ist der Code falsch? Gibt es einen besseren Weg, um den Code zu optimieren oder richtig funktionieren zu lassen?Wörterbücher und Karten in PHP

Der Beispielcode unter

<?php 
$myFile = 'text1.txt'; 
$lines = file($myFile); //file as array 
$n = (int)$lines[0]; 
$array = array(); 
$check = array(); 

foreach ($lines as $line) 
{ 
    list($key, $value) = explode(' ', $line); 
    if ($value !== NULL) 
    { 
     $array[$key] = $value; 
    } 
    else { 
      $check[]=trim($line); 
    } 
} 
$len=sizeof($check); 

for($i=1;$i<$len;$i++) { 
$flag=0; 
    foreach ($array as $key => $value){ 
     if($key===$check[$i]) { 
      $flag=1; 
      echo $key.'='.$value.'<br />'; 
      break; 
     } 
    } 
    if($flag===0) 
    echo 'Not found <br />'; 
    $flag=0; 
} 

?> 

Eine Probe Eingabe in die Datei

Datei eine Download text1.txt file here
Datei zwei Download text.text file here

Hinweis: Text1.txt Datei funktioniert und das Problem ist mit text.txt Datei (größere Datei).

+0

es wird den Wert sam 99912222, sam als Schlüssel und Telefonnummer als Wert explodieren. das funktioniert gut –

Antwort

1

Für jeden, der fragt sich, was die Frage ist:

Sie haben eine Eingabe wie folgt aus:

1 
taha 1234567 
paksu 
sam 
taha 

und der Fragesteller möchte, dass Sie Ihre Telefonliste mit n (die erste füllen Ganzzahlige) Datensätze, dann nach den angegebenen Schlüsseln von der Eingabe suchen. Die Anzahl der Abfragen ist variabel. Und die Fragesteller will man

name=number 

, wenn der Datensatz vorhanden ist, oder

Not found 

schreiben, wenn es nicht der Fall ist.


Überprüfen Sie diesen Code:

<?php 
$_fp = fopen("php://stdin", "r"); 
$n = intval(fgets(STDIN)); 
$dict = []; 
for($i=0;$i<$n;$i++){ 
    $vars = explode(" ", fgets(STDIN)); 
    $dict[trim($vars[0])] = trim($vars[1]); 
} 
while(!feof(STDIN)){ 
    $str = trim(fgets(STDIN)); 
    if(isset($dict[$str])){ 
     echo $str . "=" . $dict[$str]."\n"; 
    }else{ 
     echo "Not found\n"; 
    } 
} 

?> 

Es geht um alle Tests. Es geht nicht um PHP, sondern darum, wie Sie Ihren Algorithmus schreiben.

+0

funktioniert nicht Kompilierzeit Fehler –

+0

Ich habe gerade 30 Punkte davon. Woher? –

+0

Nicht nein bro. es funktioniert nicht –