LeetCode 26 刪除排序陣列中的重複項

2021-10-23 09:12:22 字數 1358 閱讀 3175

26. 刪除排序陣列中的重複項

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

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

示例 1:

給定陣列 nums = [1,1,2], 

函式應該返回新的長度 2, 並且原陣列 nums 的前兩個元素被修改為 1, 2。 

你不需要考慮陣列中超出新長度後面的元素。

示例 2:

給定 nums = [0,0,1,1,1,2,2,3,3,4],

函式應該返回新的長度 5, 並且原陣列 nums 的前五個元素被修改為 0, 1, 2, 3, 4。

你不需要考慮陣列中超出新長度後面的元素。

時間複雜度:o(n)

空間複雜度:o(1)

思路

(1)兩個下標 i,j ,初始時 i 在前,j 在後;

(2)遍歷並比較:

若 nums[i] = nums[j]  ,則僅僅 j++;

若 nums[i] != nums[j] ,則同時 i++,j++,兩者同時向後移動

例如:nums = [1,2,3],i = 0 指向1,j = 1 指向2,nums[0] != nums[1],判斷中先 i++,然後for迴圈中 j++,也就是i和j同時向後移動一位:

(3)補0:

最後 j 不滿足 j < j.size(),跳出for迴圈,並且 i 之前(包含i)的元素即為目標陣列,陣列長度為 i + 1。(由於leetcode只檢查前 i 個值,並不檢查 i 之後是否為0,所以這一步可省略)

int removeduplicates(vector& nums) 

}return i + 1; // 長度為 i+1

原版(不夠精煉):

int removeduplicates(vector& nums) 

// nums[i] == nums[j]的情況 j++ 提出來公共的

}// 以下由於leetcode只檢查前i個值,並不檢查i之後是否為0,所以可以注釋掉

// for (j = i + 1; j < nums.size(); j++)

// return i + 1; // 長度為 i+1

}

LeetCode 26 刪除排序陣列中的重複項

給定乙個排序陣列,你需要在原地 刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成。示例 1 給定陣列 nums 1,1,2 函式應該返回新的長度 2,並且原陣列 nums 的前兩個元素被修改為1...

leetcode26 刪除排序陣列中的重複項

給定乙個排序陣列,你需要在原地 刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成 示例 1 給定陣列 nums 1,1,2 函式應該返回新的長度 2,並且原陣列 nums 的前兩個元素被修改為1...

LeetCode 26刪除排序陣列中的重複項

給定乙個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成。示例 1 給定陣列 nums 1,1,2 函式應該返回新的長度2,並且原陣列 nums 的前兩個元素被修改為1,2...