LeetCode

Remove Duplicates from Sorted Array II

2013.12.26 15:28

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].

Solution:

  We've done the problem "Remove Duplicates from Sorted Array" before, this time the problem allows duplicates for at most twice. My solution is too move the iterator forward by two steps, if the number of consecutive duplicates is no less than 2, thus keeping 2 duplicates in the result array.

  Time complexity is O(n), space complexity is O(1).

Accepted code:

 1 // 1WA, 1AC
 2 class Solution {
 3 public:
 4     int removeDuplicates(int A[], int n) {
 5         // Note: The Solution object is instantiated only once and is reused by each test case.
 6         int i, j, k;
 7 
 8         i = 0;
 9         k = 0;
10         while(i < n){
11             j = i + 1;
12             while(j < n && A[i] == A[j]){
13                 ++j;
14             }
15             // 1WA here, minor change in the if structure will do
16             if(j > i + 1){
17                 // if there're duplicates, allow one more duplicate
18                 A[k++] = A[i];
19                 A[k++] = A[i];
20             }else{
21                 A[k++] = A[i];
22             }
23             i = j;
24         }
25 
26         return k;
27     }
28 };
原文地址:https://www.cnblogs.com/zhuli19901106/p/3492535.html