Follow up for "Remove Duplicates":
What if duplicates are allowed at most twice?
What if duplicates are allowed at most twice?
For example,
Given sorted array nums = [1,1,1,2,2,3]
,
Your function should return length = 5
, with the first five elements ofnums being1
,1
,2
, 2
and3
. It doesn't matter what you leave beyond the new length.
题意:将一个 sorted 的数组中的元素副本超过两个的删掉,并将留下的元素放在数组前面,返回其中有效的元素个数。
解析:twopointers问题,首先可以肯定的是处理后的数组有效长度肯定不大于原数组长度,因此,可以设置两个指针,一个指针指向当前需要处理的元素 j ,另一个指针指向当前有效元素的最后一个 i ,当前处理的元素有两种情况,一是需要删除的,二是放在指针 j 的下一个位置。
代码实现:
public class Solution
{
public int RemoveDuplicates(int[] nums)
{
if(nums.Length == 0)
return 0;
int flag = nums[0];
int count = 1;
int i = 0;
int j = 0;
while (j < nums.Length)
{
if (nums[j] == flag && count <= 2)
{
nums[i] = nums[j];
i++;
j++;
count++;
}
if (count > 2)
{
while (j < nums.Length && nums[j] == flag)
j++;
}
if (j < nums.Length && nums[j] != flag)
{
flag = nums[j];
count = 1;
}
}
return i;
}
}