题目
给定一个有序数组,原地删除重复的元素,使得数组里每个元素只出现一次,并返回新的长度。
不能分配额外的内存空间给其它数组,只能使用常数内存进行原地操作。
示例:
给定输入数组 nums = [1, 1, 2],你的函数应该返回 length = 2,nums 的前两个元素分别为 [1, 2],但 nums 即使乱序也没有关系。
难度:容易
编程语言:C++
分析
程序框架为:
1 2 3 4 5 6
| class Solution { public: int removeDuplicates(vector<int>& nums) { } };
|
思路是使用 vector 迭代器来遍历 vector,如果当前迭代器指向的元素跟上一个元素一样,那么删除该元素,迭代器指向被删除元素的下一个元素。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| #include <frequently-used-code-snippets.h> class Solution { public: int removeDuplicates(vector<int>& nums) { if (nums.size() == 0) { return 0; } for (vector<int>::iterator iter = nums.begin() + 1; iter != nums.end(); ) { if (*iter == *(iter - 1)) { iter = nums.erase(iter); } else { iter++; } } return nums.size(); } }; int main() { int array[] = { 1, 1, 2, 2, 3, 3, 4, 5, 6 }; vector<int> nums = convertArrayToVector(array, ARRAY_LENGTH(array)); Solution sol; int newLength = sol.removeDuplicates(nums); printVector(nums); cout << "new length: " << newLength << endl; }
|
提交到 Leetcode,Accepted! :) 运行时间为 69ms。