Remove Duplicates from Sorted Array II
Question
-
lintcode: (101) Remove Duplicates from Sorted Array II
- Follow up for "Remove Duplicates":
- What if duplicates are allowed at most twice?
-
- For example,
- Given sorted array A = [1,1,1,2,2,3],
-
- Your function should return length = 5, and A is now [1,1,2,2,3].
- Example
- Follow up for "Remove Duplicates":
題解
在上題基礎上加了限制條件元素最多可重複出現兩次。因此可以在原題的基礎上添加一變量跟蹤元素重複出現的次數,小於指定值時執行賦值操作。但是需要注意的是重複出現次數occurence的初始值(從1開始,而不是0)和reset的時機。
C++
1. class Solution {
2. public:
3. /**
4. * @param A: a list of integers
5. * @return : return an integer
6. */
7. int removeDuplicates(vector<int> &nums) {
8. if (nums.size() < 3) {
9. return nums.size();
10. }
11. 12. int size = 0;
13. int occurence = 1;
14. for (vector<int>::size_type i = 1; i != nums.size(); ++i) {
15. if (nums[size] != nums[i]) {
16. nums[++size] = nums[i];
17. occurence = 1;
18. } else if (nums[size] == nums[i]) {
19. if (occurence++ < 2) {
20. nums[++size] = nums[i];
21. }
22. }
23. }
24. 25. return ++size;
26. }
27. };
源碼分析
- 在數組元素小於3(即為2)時可直接返回vector數組大小。
- 初始化
occurence的值為1,而不是0. 理解起來也方便些。 - 初始化下標值
i從1開始nums[size] != nums[i]時遞增size並賦值,同時重置occurence的值為1(nums[size] == nums[i])時,首先判斷occurence的值是否小於2,小於2則先遞增size,隨後將nums[i]的值賦給nums[size]。這裡由於小標i從1開始,免去了對i為0的特殊情況考慮。
- 最後返回
size + 1,即為++size
