2017-04-04 23 views
-2

在解決Hackerrank中的問題時產生了此問題。問題陳述是here。我們可以使用Java(使用Map和HashMap)或Python來解決這個問題。但是,當我嘗試解決PHP中的問題時,我得到一個終止錯誤。這是因爲代碼執行時間過長。對於較小的文件大小,代碼工作正常,但對於較大的文件,則會發生錯誤(由於超時而終止)。如何在PHP中完成映射?代碼錯了嗎?有沒有更好的方法來優化或讓代碼正常工作?PHP中的詞典和地圖

的代碼示例低於

<?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; 
} 

?> 

A輸入到文件

文件一個Download text1.txt file here
文件2 Download text.text file here

樣品注意:text1.txt文件正在工作,問題出在text.txt 文件(較大的文件)。

+0

它將爆炸sam 99912222的值,sam作爲鍵值和電話號碼。這是工作正常 –

回答

1

對於任何人誰懷疑的問題是什麼:

你有一個這樣的輸入:

1 
taha 1234567 
paksu 
sam 
taha 

和提問者想讓你用N來填補你的電話清單(第一整數)記錄,然後檢查輸入中給定的鍵。查詢計數是可變的。而提問者要你寫

name=number 

如果記錄不存在,或者

Not found 

,如果它不。


檢查這個代碼:

<?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"; 
    } 
} 

?> 

它通過了所有測試。這不是關於PHP,而是你如何編寫你的算法。

+0

無法正常工作編譯時間錯誤 –

+0

我剛剛得到30分。怎麼來的? –

+0

不要不要兄弟。它不工作 –