首页 > 试题广场 >

删除有序数组中重复的元素 ii

[编程题]删除有序数组中重复的元素 ii
  • 热度指数:13015 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

给定一个有序数组,删除其中部分元素,使得剩下的每个数最多出现2次。要求删除的数的数量尽可能少。

例如:
给出有序数组 A =[1,1,1,2,2,3],
你给出的函数应该返回length =5,  A 变为[1,1,2,2,3].

public class Solution {
    public int removeDuplicates(int[] A) {
        if (A == null)
            return 0;
        if (A.length < 3)
            return A.length;
        int index = 2;
        for (int i = 2; i < A.length; i++) {
            if (A[i] != A[index-2])
                A[index++] = A[i];
        }
        return index;
    }
}
发表于 2018-04-02 14:40:55 回复(0)
public int removeDuplicates(int[] nums) { int i = 0; for (int n : nums) if (i < 2 || n > nums[i-2])
            nums[i++] = n; return i;
}

发表于 2017-03-12 11:49:13 回复(0)
	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;
	}

发表于 2016-11-08 22:59:27 回复(0)
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();
	}
}

发表于 2016-11-06 17:21:36 回复(0)