給定一個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。
不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 O(1) 額外空間的條件下完成。
給定陣列 nums = [1,1,2],
函式應該返回新的長度 2, 並且原陣列 nums 的前兩個元素被修改為 1, 2。
你不需要考慮陣列中超出新長度後面的元素。
給定 nums = [0,0,1,1,1,2,2,3,3,4],
函式應該返回新的長度 5, 並且原陣列 nums 的前五個元素被修改為 0, 1, 2, 3, 4。
你不需要考慮陣列中超出新長度後面的元素。
解法: 雙指標
首先注意陣列是有序的,那麼重複的元素一定會相鄰。
要求刪除重複元素,實際上就是將不重複的元素移到陣列的左側
class Solution {
/**
* @param Integer[] $nums
* @return Integer
*/
function removeDuplicates(&$nums) {
$count = count($nums);
$out = 0;
if (empty($nums)) return $out;
for ($i = 0; $i < $count; $i++) {
if ($i == $count - 1) {
$out++;
break;
}
$l = $i + 1;
if ($nums[$i] == $nums[$l]) {
unset($nums[$i]);
continue;
}
$out++;
}
return $out;
}
}
如果是使用PHP則可以使用自帶的array_unique陣列函式,去除陣列中重複的元素。
class Solution {
/**
* @param Integer[] $nums
* @return Integer
*/
function removeDuplicates(&$nums) {
$nums=array_unique($nums);
return count($nums);
}
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結