- 1 题目
- 2 解决方案
- 2.1 思路
- 2.2 时间复杂度
- 2.3 空间复杂度
- 3 源码
题目:去除重复元素(Remove Duplicate Numbers in Array)
描述:给一个整数数组,去除重复的元素。你应该做这些事:1.在原数组上操作;2.将去除重复之后的元素放在数组的开头;3.返回去除重复元素之后的元素个数。不需要保持原数组的顺序。
lintcode题号——521,难度——easy
样例1:
输入:nums = [1,3,1,4,4,2] 输出: [1,3,4,2,?,?] 4 解释: 1. 将重复的整数移动到 nums 的尾部 => nums = [1,3,4,2,?,?]. 2. 返回 nums 中唯一整数的数量 => 4. 事实上我们并不关心你把什么放在了 ? 处, 只关心没有重复整数的部分.
样例2:
输入:nums = [1,2,3] 输出: [1,2,3] 32 解决方案 2.1 思路
使用两个指针,一个指针从左向右指示当前的需要填充的位置,一个指针用于从左向右找不重复的数,然后不断地将不重复的数向前填充即可。
2.2 时间复杂度时间复杂度为O(n)。
2.3 空间复杂度空间复杂度为O(1)。
3 源码细节:
- 同向双指针法,left从左往右一步一步走,right从左往右依次寻找不重复的数,依次将不重复的数填充到left位置。
- 判断重复可以使用set数据结构。
C++版本:
int deduplication(vector&nums) { // write your code here if (nums.empty()) { return 0; } set duplicate; int left = 0; int right = 0; while (right < nums.size()) { if (duplicate.find(nums.at(right)) == duplicate.end()) { swap(nums.at(left), nums.at(right)); duplicate.insert(nums.at(left)); left++; } right++; } return left; }



