2011-05-17 51 views
1

假設我們有一個簡單的(非關聯)數組,其中包含100001個值,並且這些值以未排序的順序設置,如45,12,32,23。我們知道在這個數組中有1對數字,如何查找它最佳 - 不通過2個foreach循環,甚至不通過2與100001/2分區循環?通過數組搜索並找到1個最佳耦合?

+0

難道你不能排序數組? – Toto 2011-05-17 15:13:54

+0

那麼數字從1到100000和一個重複或什麼?或者什麼是*幾個數字*? – 2011-05-17 15:16:52

+0

是的1 dublicate,對不起,我只是俄羅斯 - 壞Engl在所有=)就像我說過的我通過2種方法解決了這個任務,一個是通過數組做2個循環,一個一個比較,另一個是除以2並從開始/開始循環1-st,從結束到結束/實際上一半循環。 – 2011-05-17 15:44:22

回答

1

使用array_count_values

$result=array_count_values($arr); 
$value=array_search(2, $result); 

print $value; 
+0

男人,放鬆。 1)這個代碼將找到任何數字的任何對,「2」代表「對」。閱讀手冊。 2)php的功能總是比你的代碼更快。如果這是你的家庭作業和理論上的問題 - 問問http://programmers.stackexchange.com/ – 2011-05-17 15:24:30

0

因爲你的數組沒有排序,不是隨機scatteryshot其他唯一的搜索方法是掃描陣列依次找你兩個數字:

$first_key = null; 
$second_key = null; 

foreach($array as $key => $val) { 
    if ($val == $first_number) { 
     $first_key = $key; 
    } 
    if ($val == $second_number) { 
     $second_key = $key; 
    } 
    if (!is_null($first_key) && !is_null($second_key)) { 
     break; 
    } 
} 

一旦兩個數字都被找到,或者你到達數組的末尾,循環將退出。

+0

可能是這個'foreach($ arr AS $ val1){ foreach($ arr AS $ val2){ if( $ val1 === $ val2)return $ val1; } }'不,我說這不是最理想的,我知道這一點,並且已經寫下了它。只是仔細閱讀傢伙。 – 2011-05-17 15:39:05

+0

我確實仔細閱讀過。您發佈了一些逗號分隔的數字片段,並說您想查找「情侶號碼」。也許你應該說如果它是一個多維數組,或者更好的辦法是發佈一大堆var_dump/print_r輸出來展示它的真實外觀。 – 2011-05-17 15:40:37

+0

是嗎?和? '$ array [0] = 1; $ array [100001] = 42'。你去,100001陣列元素。我的眼睛很好,你需要處理你的問題提問能力。 – 2011-05-17 15:56:41