快轉到主要內容
leetcode 26 - Remove Duplicates from Sorted Array

leetcode 26 - Remove Duplicates from Sorted Array

·
類別 
Leetcode
標籤 
Java Leetcode Easy Two Pointers Problem
Eason Chiu
作者
Eason Chiu
一個不做筆記就容易忘記的工程師
目錄

題目
#

leetcode 26 - Remove Duplicates from Sorted Array

題目簡述
#

給定一個排序好的整數陣列,移除重複的元素,使得每個元素只出現一次,並返回新的陣列長度。

Example 1:

Input: nums = [1,1,2]
Output: 2, nums = [1,2,_]
Explanation: 函數應該回傳 k = 2,nums 前兩個元素為 1 和 2。後面的元素不重要,可以是任意值。

Example 2:

Input: nums = [0,0,1,1,1,2,2,3,3,4]
Output: 5, nums = [0,1,2,3,4,_,_,_,_,_]
Explanation: 函數應該回傳 k = 5,nums 前五個元素為 0, 1, 2, 3, 4。後面的元素不重要,可以是任意值。

解題思路
#

輸入為一個排序好的陣列,將nums陣列內容的前k的去除重複的數字由小到大排出。
首先初始化二個index作為比較的指針i、j,
i為到結束前作為遍歷指針直到最後一項結束,
j為判斷有是否有新的重複指針,就會將j所在的直放到該位置,
因為是排序好的陣列,只要與j位置陣列,判斷有相異就放上新的內容

步驟 陣列狀態 指針位置 操作說明
Step 1 [0,0,1,1,1,2,2,3,3,4] i=1, j=1 i從1開始,與j-1位置比較,相同所以不做任何操作
[0,_,_,_,_,_,_,_,_,_] 第一個位置保持不變
Step 2 [0,0,1,1,1,2,2,3,3,4] i=2, j=1 與j-1位置比較,不同,將1放入j位置
[0,1,_,_,_,_,_,_,_,_] i=2, j=2 j指針移動到下一個位置
Step 3 [0,0,1,1,1,2,2,3,3,4] i=3, j=2 與j-1位置比較,相同所以不做任何操作
[0,1,_,_,_,_,_,_,_,_] j指針保持不變
Step 4 [0,0,1,1,1,2,2,3,3,4] i=5, j=2 與j-1位置比較,不同,將2放入j位置
[0,1,2,_,_,_,_,_,_,_] i=5, j=3 j指針移動到下一個位置
Step 5 [0,0,1,1,1,2,2,3,3,4] i=7, j=3 與j-1位置比較,不同,將3放入j位置
[0,1,2,3,_,_,_,_,_,_] i=7, j=4 j指針移動到下一個位置
Step 6 [0,0,1,1,1,2,2,3,3,4] i=9, j=4 與j-1位置比較,不同,將4放入j位置
[0,1,2,3,4,_,_,_,_,_] i=9, j=5 j指針移動到下一個位置
Step 7 [0,1,2,3,4,2,2,3,3,4] 遍歷完成,返回j=5

Function 只要回傳相異的K即可。

完整程式碼
#

java
class Solution {
    public int removeDuplicates(int[] nums) {
        int j = 1; // 初始化第二個指針
        for (int i = 1; i < nums.length; i++) { // 從第二個元素開始
            if (nums[i] != nums[j - 1]) { // 如果當前元素不是重複的
                nums[j] = nums[i]; // 將其移動到數組的下一個位置
                j++; // 增加第二個指針
            }
        }
        return j; // 返回沒有重複元素的數組長度
    }
}

時間複雜度
#

  • 時間複雜度:O(n),其中 n 是數組的長度
  • 空間複雜度:O(1),只使用了常數額外空間

相關文章

leetcode 1047 - Remove All Adjacent Duplicates In String
類別 
Leetcode
標籤 
Java Leetcode Easy Two Pointers Problem
leetcode 344 - Rrevese String
類別 
Leetcode
標籤 
Java Leetcode Easy Two Pointers Problem
leetcode 11 - Container With Most Water
類別 
Leetcode
標籤 
Java Leetcode Medium Two Pointers Problem Blind75