算法基本思想是用一个hash表来存储数组中的数是否出现,如果没有出现,则存入结果数组,如果出现过,则直接跳过,php代码实现如下:
<?php
/**
* 给定N个数,从中找出M个不相同的数,m小于N
*/
function find($a,$m){
$n = count($a);
//标志位数组
$flag = array();
//结果数组
$result = array();
$i=0;
$j=0;
while($i<$m){
//如果查找完a数组都没有找到,则直接退出
if($j==$n){
echo "find nothing";
exit();
//break;
}
$value = $a[$j];
//如果标志位没有出现,则放入
if($flag[$value]!==1){
array_push($result, $value);
//置位标志位
$flag[$value]=1;
$i++;
}
$j++;
}
foreach ($result as $value) {
echo $value." ";
}
}
function main(){
$a = array(1,2,3,5,5,4,3,2,1);
$m = 5;
find($a,$m);
}
main();
?>