速速读题(即:有序数组的每个元素最多只能出现两次,返回删除多余元素(第3重复者或4,5,6...后的数组长度)
话不多说,开写。
又是快慢指针,low存储已存放的数组索引,high从1到length-1遍历数组。count为重复元素计数器,因为一开始high索引从1开始,已经有nums[low]这个元素,因此count数置为1。当nums[high]!=nums[low]时,说明nums[high]元素是第一次遍历到,count重置为1,并将其存在nums[low+1]。
In short:无论索引high处的元素是否与low处的元素相等,只要计数器count不等于3,都能将索引high处的元素复制到nums[low+1]中。
class Solution {
public int removeDuplicates(int[] nums) {
//计数器,等于3
int low=0;
int high=1;
int count=1;
while(high!=nums.length){
if(nums[high]==nums[low]){
count++;
if(count>=3){
high++;
continue;
}
nums[low+1]=nums[high];
low++;
high++;
}else{
count=1;
nums[low+1]=nums[high];
low++;
high++;
}
}
return low+1;
}
}
orz!