给定一个有序数组,删除其中部分元素,使得剩下的每个数最多出现2次。要求删除的数的数量尽可能少。
例如:
给出有序数组 A =[1,1,1,2,2,3],
你给出的函数应该返回length =5, A 变为[1,1,2,2,3].
public int removeDuplicates(int A[]){ if( A.length<3) return A.length; int count=0;//计数器 for (int i = 0; i < A.length-2; i++) {//最后两个不用比较 //只和后边的比较保证了A[count++]=A[i]改动的值,不会再用来比较 if (A[i]==A[i+1] && A[i+1]==A[i+2]) continue; else A[count++]=A[i]; } int len=A.length; //最后两个肯定不重复 A[count++]=A[len-2]; A[count++]=A[len-1]; return count; }
import java.util.*; public class Solution { public static int removeDuplicates(int[] A) { if(A.length == 0) return 0; List<Integer> list = new ArrayList<>(); list.add(A[0]); int count = 1; for (int i = 1; i < A.length; i ++ ) { if(A[i] == A[i - 1]) count ++ ; else count = 1; if(count == 1 || count == 2) list.add(A[i]); } for (int i = 0; i < list.size(); i ++ ) { A[i] = list.get(i); } return list.size(); } }