php找出兩個有序數組中的相同元素

如題,筆試一般喜歡考這些問題,給定兩個有序數組(元素唯一,不重複),如何從中找出相同的元素

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章