題目: LeetCode - 26. Remove Duplicates from Sorted Array

題目說明

給一個由小到大排序好的陣列,要求刪除陣列中重複的數字,並回傳處理後的陣列的大小。

題目希望使用原本的陣列來達成,不要建立額外的陣列,也就是空間複雜度為 O(1) 的意思。

解題思路

先判斷 nums 是否為空,若為空直接回傳 0。
定義 idx 紀錄目前的 index,由於陣列是排序好的,重複的數字會被排在一起,所以依序遍歷陣列,若碰到與 nums[idx] 不同的數字,則放入 nums[idx + 1],同時將 idx + 1,最後回傳 idx + 1,因為題目要求回傳的是大小。

參考解法

1
2
3
4
5
6
7
8
9
10
class Solution {
public:
int removeDuplicates(vector<int>& nums)
{
if (nums.empty()) return 0;
int idx = 0;
for (auto& n : nums) if (n != nums[idx]) nums[++idx] = n;
return ++idx;
}
};