有一个已排序的数组,里面有部分元素重复,请写一个算法,删除数组中的重复项。

PHP 算法面试题
1
0
分享
推荐答案
展示答案

<?php //监控变化 $nums = [0, 0, 1, 1, 1, 2, 2, 3, 3, 4]; remove_dup_check_change($nums); print_r($nums); function remove_dup_check_change(&$nums) {     if (empty($nums)) {         return 0;     }     $tmp = null;     foreach ($nums as $i => $num) {         //当元素与tmp不一致时,说明到达变化点,即将进入下一组         if ($num !== $tmp) {             $tmp = $num;             //当元素与tmp一致时,说明仍在同一组         } else if ($num === $tmp) {             unset($nums[$i]);         }     }     return count($nums); } //快慢指针 $nums = [1, 1, 1, 2, 2]; remove_dup_fast_slow($nums); print_r($nums); function remove_dup_fast_slow(&$nums) {     if (empty($nums)) {         return 0;     }     $len = count($nums);     for ($slow = 0; $slow < $len; ) {         $fast = $slow + 1;         //快指针与慢指针指向元素相同,依次删除快指针指向元素         while (isset($nums[$fast]) && $nums[$fast] === $nums[$slow]) {             unset($nums[$fast]);             $fast++;         }         $slow = $fast;     }     return count($nums); }

答案已隐藏