Remove Duplicates from Sorted Array II C#

来源:互联网 发布:vscode golang build 编辑:程序博客网 时间:2024/06/04 01:25
Follow up for "Remove Duplicates":
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;        }    }

0 0
原创粉丝点击