LeetCode Remove Element 快速删除数组中的某一值

Remove Element 

Given an array and a value, remove all instances of that value in place and return the new length.

The order of elements can be changed. It doesn't matter what you leave beyond the new length.

为初级入门题了。

两种思路:

1 如果找到特定值那么用最后一个元素值覆盖之,最后元素往前进一个元素

2 一个快指针,一个慢指针,不等于特定值的时候,把快指针指向值覆盖慢指针值。这里是用下标表示指针概念了。

我本来以为第一个思路会快点的,不过测试的编译时间差不多,应该速度差别都可以忽略不计。

思路1程序:

int removeElement(int A[], int n, int elem) 
	{
		int k = n-1;
		for (int i = 0; i <= k; i++)
		{
			if (A[i] == elem)
			{
				while (i<=k && A[k] == elem) k--;
				if (i<=k && A[k] != elem) 
				{
					A[i] = A[k];
					k--;
				}
			}
		}
		return k+1;
	}


 

思路2程序:

int removeElement(int A[], int n, int elem)
	{
		int i = 0, j = 0;
		for (; i < n; i++)
		{
			if (A[i] != elem)
			{
				A[j++] = A[i];
			}
		}
		return j;
	}


 

 

//2014-1-25 update
class Solution1 {
public:
	int removeElement(int A[], int n, int elem)
	{
		int i = 0, j = 0;
		for ( ; j < n; j++)
		{
			if (A[j] != elem) A[i++] = A[j];
		}
		return i;
	}
};

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值