C语言——移除元素

题目描述

给你一个数组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的元素的个数。

具体代码如下:

  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值