LeetCode Remove Duplicates from Sorted Array II

本文分享了一种高效移除数组中多余重复元素的方法,并对比了新旧两种实现方式。通过简化逻辑,新版本不仅代码更简洁,而且成功通过了测试。

刚开始没把这题当个事,随便写了,说是timeout,却没给测试用例,以为真有什么玄机呢,看了下网上别人的答案也都差不多,改了改原来的,这次过了。新版本确实能简单点,不用标志,不用continue,但复杂度应该是一样的。新版本如下:

int removeDuplicates(int *A, int n) {
	if(n==0||n==1)
		return n;
	int i=0,j=0;
	while(j<n)
	{
		A[i] = A[j];
		if(j+1<n&&A[j+1]==A[j])
		{
			A[i+1] = A[j+1];
			i+=2;
			j+=2;
		}
		else
		{
			++i;
			++j;
		}
		while(A[j]==A[j-1])
			++j;
	}
	return i;
}
老版本如下:没通过

    int removeDuplicates(int A[], int n) {
	int i=0,j=0;
	bool flag = false;
	while(j<n)
	{
		if (!flag)
		{
			A[i] = A[j];
			if(A[j+1]==A[j])
			{
				A[i+1] = A[j+1];
				i+=2;
				j+=2;
			}
			else
			{
				++i;
				++j;
			}
			flag = true;
			continue;
		}
		if(A[j]!=A[j-1])
		{
			flag = false;
			continue;
		}
		++j;
	}
	return i;
}
恩,编程确实应该越简单越好,高手和差手的差别就是高手把复杂的变简单,差手把简单的变复杂。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值