如題,筆試一般喜歡考這些問題,給定兩個有序數組(元素唯一,不重複),如何從中找出相同的元素
php其實已經給我們提供了方法來實現 array_intersect($arr1,$arr2),該方法只比較鍵值,返回鍵值相同的元素
當然筆試也不會考你係統函數調用,下面說說思路
很簡單,兩個數組從下標爲0開始比較大小,小的向後取下一位值,如果相等則輸出並將其中一個取下一位值,直到其中一個數組完成一輪完整的遍歷爲止
代碼如下:
public function findTheSameItems($arr1,$arr2) { $size1 = count($arr1); $size2 = count($arr2); $i = $j = 0; $re = []; while(true) {//移動值較小的 if($arr1[$i] > $arr2[$j]) $j++; elseif($arr1[$i] < $arr2[$j]) $i++; else { array_push($re,$arr1[$i]); $j++; } if($i == $size1 || $j == $size2) break; } return $re; }
如果輸入數組有重複元素,只要用in_array()方法判斷一下是否在結果集中即可,在則繼續,否則加入結果集
如果是無序數組,我覺得也沒必要先排序再用這個方法了,直接兩層for循環比較吧,因爲你再排序差不多也是這個複雜度
轉自:https://blog.csdn.net/liangxun0712/article/details/78460249