Follow up for "Remove Duplicates":
What if duplicates are allowed at most twice?git
Given sorted array nums = [1,1,1,2,2,3], Your function should return length = 5, with the first five elements of nums being 1, 1, 2, 2 and 3. It doesn't matter what you leave beyond the new length.
难度:中
分析:条件参考Remove Duplicates算法,只不过以前元素只容许重复1次,如今改成最多能够重复2次。
思路:既然输入的数组排好序的,那咱们定义一个有效元素的数组长度变量i,而后开始遍历元素:
1. 检索当前元素以前的2个元素,若是跟当前元素相等,说明不知足最多重复2次的条件了,这时候有效元素的数组长度i就不要再自增了;
2. 不然的话,以前的2个元素,如跟当前元素不相等(小于),说明这个当前元素为有效值,因此将数组末尾元素赋值当前元素,有效元素的数组长度i自增1;
依照上述逻辑循环判断,一直到数组最后一个元素,循环结束后,根据有效元素的数组长度i,得到[0,i)范围内的数组元素,即为题目要求的结果。github
public int RemoveDuplicates2(int[] nums) { int i = 0; foreach (var num in nums) { //判断是否有2个以上重复,有的话有效索引+1,并将当前元素赋值到有效数组 if (i < 2 || num > nums[i - 2]) nums[i++] = num; } return i; }