[Leetcode] Remove Duplicates From Sorted Array II (C++)

题目:

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

Tag:

Array; Two Pointers

体会:

继续是quicksort中partition函数的改写。和Remove Duplicates From Sorted Array只有一处变化。这次的变化是第10处的那个判断条件多了一部分 A[len - 1] != A[i] 。从A[0]到A[len]是满足题意要求的部分, 如果现在正在检查的这个element已经在A[0]-A[len]出现过了,但是只要它在最近的两个中没有出现,还是可以加到现在的部分中的。

 1 class Solution {

 2     public:

 3         int removeDuplicates(int A[], int n) {

 4             // length of satisfied part

 5             int len = -1;

 6             for (int i = 0; i < n; i++) {

 7                 // if it is unique to current satisfied part 

 8                 // or it has not shown within last two positions

 9                 // in current satisfied part

10                 if (A[i] != A[len] || A[len - 1] != A[i]) {

11                     len++;

12                     A[len] = A[i];

13                 }

14             }

15             return len + 1;

16         }

17 };

 

你可能感兴趣的:(LeetCode)