题目
看到题目后脑海蹦出的,第一种思路(别的语言可能出错,或者使用逆序)
循环查找和后一个是否一样,一样的话删除这个。
class Solution {
/**
* @param Integer[] $nums
* @return Integer
*/
function removeDuplicates(&$nums) {
$len = count($nums);
if($len == 0) return 0;
for($i = 0; $i < $len -1 ;$i++)
{
if($nums[$i] == $nums[$i + 1])
{
unset($nums[$i]);
}
}
return count($nums);
}
}
第二种思路
双指针,对比是否和前面一样,不一样的话 left + 1 并把 right 赋值给 left 指向的地址,最后返回left + 1 即是最终处理过的长度。
class Solution {
/**
* @param Integer[] $nums
* @return Integer
*/
function removeDuplicates(&$nums) {
$len = count($nums);
if($len == 0) return 0;
$left = 0;
for($right = 0; $right < $len;$right++)
{
if($nums[$left] != $nums[$right])
{
$left++;
$nums[$left] = $nums[$right];
}
}
return $left + 1;
}
}