LeetCode-數組-刪除有序數組重複元素

題目描述

給定一個排序數組,你須要在原地刪除重複出現的元素,使得每一個元素只出現一次,返回移除後數組的新長度。java

不要使用額外的數組空間,你必須在原地修改輸入數組並在使用 O(1) 額外空間的條件下完成。數組

給定數組 nums = [1,1,2], 

函數應該返回新的長度 2, 而且原數組 nums 的前兩個元素被修改成 1, 2。

解題思路

採用雙指針方式處理。
  1. 初始指針 i, j 位置爲 0
  2. 指針 j 先向右移動
  3. 比較指針 i,j 元素是否相同,若指針i,j元素相同則指針 j 繼續向右移動;反之將指針 j 元素複製到指針 i + 1 處元素
  4. 當指針 j 移動到數組末尾時則中止

其流程以下圖所示:函數

實現

public static int solution (int[] nums) {
    int i = 0, j = 0;

    while (true) {
        // 指針 j 向右移動
        j++;

        // 指針 j 移動到數組末尾則退出,說明數組元素都判斷了去重
        if (j >= nums.length) {
            break;
        }

        if (nums[j] == nums[i]) {
            // 指針 i, j 元素相同,說明重複元素;
            // 指針 j 繼續向右移動
            continue;
        } else {
            // 指針 i, j 元素不相同;則將指針 j 元素複製到 指針 i 後一位,這樣就保證指針 i 後元素不重複
            nums[i + 1] = nums[j];
            // 指針 i 向右移動,繼續處理
            i++;
        }
    }

    return i + 1;
}
相關文章
相關標籤/搜索