LeetCode Online Judge 题目C# 练习 - 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].

 1         public static int RemoveDuplicatesfromSortedArrayII(int[] A)

 2         {

 3             int prev = A[0];

 4             int numtoremove = 0;

 5             int ret = A.Length;

 6 

 7             for (int i = 1; i < ret; i++)

 8             {

 9                 if (prev == A[i])

10                 {

11                     numtoremove++;

12                 }

13                 else

14                 {

15                     if (numtoremove > 1)

16                     {

17                         RemoveDuplicatesfromSortedArrayShiftLeft(A, ret, i, numtoremove - 1);

18                         ret -= numtoremove - 1;

19                         i -= numtoremove - 1;

20                     }

21                     prev = A[i];

22                     numtoremove = 0;

23                 }

24             }

25 

26             if (numtoremove > 1)

27             {

28                 ret -= numtoremove - 1;

29             }

30 

31             return ret;

32         }

33         

34         public static void RemoveDuplicatesfromSortedArrayShiftLeft(int[] A, int alength, int index, int n)

35         {

36             for (int i = index; i < alength; i++)

37             {

38                 A[i - n] = A[i];

39             }

40         }

代码分析:

  也不难,少remove一个而已,但是要记得 prev = A[i], numtoremove = 0 在下一个不重复处就都需要做。 同样不能忘了最后一个数重复的corner case。

你可能感兴趣的:(LeetCode)