每日一題 [26] 刪除排序陣列中的重複項

cr921127發表於2020-02-02

給定一個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。
不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 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 協議》,轉載必須註明作者和本文連結

相關文章