题目描述
给你一个数组nums和一个值val,你需要原地移除所有数值等于val 的元素。元素的顺序可能发生改变。然后返回nums中与val不同的元素的数量。
假设nums中不等于val 的元素数量为k,要通过此题,您需要执行以下操作:
1.更改nums数组,使nums的前k个元素包含不等于val 的元素。nums的其余元素和nums的大小并不重要。
2.返回k。
示例
输入:nums = {0,1,2,2,3,0,4,2},val = 2
输出:5,nums = {0,1,4,0,3,_,_,_}
解释:你的函数应该返回k=5,并且nums中的前五个元素为0,0,1,3,4。注意这五个元素可以任意顺序返回。你在返回的k个元素之外留下了什么并不重要(因此它们并不计入评测)。
题解
首先定义两个变量src和dst,使nums[src]和nums[dst]分别表示数组的首元素。
当nums[src]不等于2时,用nums[src]将nums[dst]替换掉,再让src和dst同时往后走一步;当nums[src]等于2时,就让src单独往后走,而dst不动,直到nums[src]不等于2的位置停下,再用nums[src]替换掉nums[dst]。
此时nums[src] = 3,用3替换掉前面num[dst]的值(2)。
接着重复上述步骤。
最后返回dst=5,刚好是数组中不等于2的元素的个数。
具体代码如下: