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 };

 

 posted on 2013-12-26 15:30  zhuli19901106  阅读(165)  评论(0编辑  收藏  举报