您的位置:首页 > 其它

Lettcode_80_Remove Duplicates from Sorted Array II

2015-02-15 14:37 323 查看
本文是在学习中的总结,欢迎转载但请注明出处:/article/1372510.html

Follow up for "Remove Duplicates":

What if duplicates are allowed at most twice?

For example,

Given sorted array A =
[1,1,1,2,2,3]
,

Your function should return length =
5
, and A is now
[1,1,2,2,3]
.

思路:

(1)题意为给定已排好序的整数数组,如果数组中某一元素从第i个位置到第j个位置(i<j)出现n次,若n>2,则需将位置为i+2到j位置上的j-i-2个元素移除,并将位置j后续元素分别前移j-i-2个位置;若n<=2,则无需改变;求去除重复元素后数组大小以及所得数组。

(2)该题考查的是对数组的操作。由于数组是已经排好序的,所以从前往后遍历一次数组就可以得到结果。在遍历的过程中,设置变量count记录重复元素的个数,如果遇到当前元素和后续元素相同,则count++,如果count<3,则当前位置元素不变;如果count>=3,则当前位置元素不存入数组,直到遍历到下一个数值不同的元素,将下一个出现的数值不同的元素存储在"遍历数组时count=3"的位置上,这样每次遇到连续出现三次或以上的元素时,总是会保留原数组中两个该元素的值,将多余的元素值用其后续数值不同的元素按顺序替换。最后,遍历完数组即为所得。详情见下方代码。

(3)该题还是比较简单,需要注意的是对改变元素位置合适时机的正确判断。希望本文对你有所帮助。

算法代码实现如下:

/**
	 * @author liqq
	 */
	public static int removeDuplicates(int[] A) {
		if(A==null || A.length==0)  
	        return 0;  
	    int idx = 0;  
	    int count = 0;  
	    for(int i=0;i<A.length;i++)  
	    {  
	        if(i>0 && A[i]==A[i-1])  
	        {  
	            count++;  
	            if(count>=3)  
	                continue;  
	        }  
	        else
	        {  
	            count = 1;  
	        }  
	        A[idx++]=A[i];  
	    }  
	    
	    return idx;  
    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: