1. 程式人生 > >leetcode 26 Remove Duplicates from Sorted Array(在有序陣列中刪除重複元素)

leetcode 26 Remove Duplicates from Sorted Array(在有序陣列中刪除重複元素)

題目要求:

給定排好順序的陣列,在陣列內刪除重複項,使每個元素只出現一次並返回不含重複項陣列的長度
不要為另一個數組分配額外的空間,保持空間複雜度是O(1)。

Example

輸入 [1,1,2] 輸出:2
輸入 [0,0,1,1,1,2,2,3,3,4] 輸出:5

解題思路

對一個排好順序的陣列,我們只需要比較相鄰的兩個元素是否相同即可判斷陣列是否含有重複項。
在這裡,為了方便,我們採用雙指標法
用一個指標來從前到後對陣列進行遍歷,另一個指標來記錄非重複元素的索引(通過當前遍歷元素和下一個元素判斷是否重複)。
需要注意的是陣列為空的情況不要忘記。程式碼如下:

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
         if(nums.size()==0) return 0; // 陣列為空
         int record = 0; // 第一個指標記錄非重複
         for(int traverse = 1; traverse < nums.size(); traverse++)
        {
             // 判斷當前元素是否重複
             // if(nums[traverse] != nums[record]) is also true. 
if(nums[traverse] != nums[traverse - 1]) nums[++record] = nums[traverse]; // 記錄非重複元素,並且將記錄指標向後移動。 } return record + 1; } }; ### *原題連結:https://leetcode.com/problems/remove-duplicates-from-sorted-array/*