无序数组去重算法
无序数组去重算法的复杂度是O(n2)。
代码如下,首先进行外层循环,复杂度O(n),然后查找这个元素之前的元素中有没有重复的,复杂度O(n),如果有就删除,复杂度O(1),没有就下一个元素,复杂度O(1)。加起来复杂度O(n2)。
完整代码在github上面,只需要clone下来执行composer install
然后执行 php artisan test:unsortDeduplicate
就可以看到结果了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
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; while ($index < $i) { if (!array_key_exists($index, $a)) {$index++;continue;} if ($a[$i] == $a[$index]) return $index; else $index++; } return false; }
|