题意理解:
题意同26题,只是运行可以有两个相同的元素;
题目分析:
递归处理;
解题代码:
public class Solution {
private static final int MAX_TIMES=2;
private void erase(int[] nums, int pos, int size){
for(int i=pos; i<size-1;i++){
nums[i]=nums[i+1];
}
}
private int process(int[] nums, int initPos, int preNum, int times, int size){
int len=size;
if(initPos>=len){
return 0;
}
int preTimes=times;
if(times==0){
preNum=nums[initPos];
preTimes=1;
}else{
if(nums[initPos]==preNum){
preTimes++;
}else{
preNum=nums[initPos];
preTimes=1;
}
}
if(preTimes>MAX_TIMES){
erase(nums, initPos, size);
return process(nums, initPos, preNum, preTimes, size-1);
}else{
return 1+process(nums, initPos+1, preNum, preTimes, size);
}
}
public int removeDuplicates(int[] nums) {
return process(nums, 0, 0, 0, nums.length);
}
}