无序数组去重算法
无序数组去重算法的复杂度是O(n2)。
代码如下,首先进行外层循环,复杂度O(n),然后查找这个元素之前的元素中有没有重复的,复杂度O(n),如果有就删除,复杂度O(1),没有就下一个元素,复杂度O(1)。加起来复杂度O(n2)。
完整代码在github上面,只需要clone下来执行composer install
然后执行 php artisan test:unsortDeduplicate
就可以看到结果了
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$a = [4,5,4,3,8,6,6,10,34,10,4];
dump($a);
$i = 1;
$len = count($a);
dump("长度:".$len);
while ($i < $len) { //循环全部数据
//在整个数组中寻找这个值,如果找到了就删除他,如果没找到就下一个
$preIndex = $this->find($i, $a);
if ($preIndex!==false) {unset($a[$preIndex]);}
else $i++;
}
dd($a);
}
private function find($i, array $a) {
$index = 0;
//循环从0到这个下标
while ($index < $i) {
//不存在说明被删除了
if (!array_key_exists($index, $a)) {$index++;continue;}
//如果找到了返回下标
if ($a[$i] == $a[$index]) return $index;
else $index++;
}
return false;
}