【力扣刷题实战】(顺序表)移除元素

大家好,我是小卡皮巴拉
文章目录
目录
力扣题目: 移除元素
题目描述
示例 1:
示例 2:
解题思路
具体思路
题目要点
完整代码
兄弟们共勉 !!!
每篇前言
博客主页:小卡皮巴拉
咱的口号:🌹小比特,大梦想🌹
作者请求:由于博主水平有限,难免会有错误和不准之处,我也非常渴望知道这些错误,恳请大佬们批评斧正。
力扣题目: 移除元素
原题链接:移除元素
题目描述
给你一个数组
nums和一个值val,你需要 原地 移除所有数值等于val的元素。元素的顺序可能发生改变。然后返回nums中与val不同的元素的数量。假设
nums中不等于val的元素数量为k,要通过此题,您需要执行以下操作:
- 更改
nums数组,使nums的前k个元素包含不等于val的元素。nums的其余元素和nums的大小并不重要。- 返回
k。示例 1:
输入:nums = [3,2,2,3], val = 3
输出:2, nums = [2,2,_,_]
解释:你的函数函数应该返回 k = 2, 并且 nums 中的前两个元素均为 2。
你在返回的 k 个元素之外留下了什么并不重要(因此它们并不计入评测)。示例 2:
输入: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 个元素之外留下了什么并不重要(因此它们并不计入评测)。
解题思路
我们在这里用到双指针法来进行数组去重:给定一个排序数组,需要在原地删除重复出现的元素,使每个元素只出现一次,并返回移除后数组的新长度。可以使用快慢指针来实现,快指针用于遍历数组,慢指针用于指向已处理元素的最后一个位置。
具体思路
- 初始化双指针:
- 使用两个指针
dst和src,都初始化为0。dst指针用于记录当前不等于val的元素应该放置的位置(即目标位置)。src指针用于遍历整个数组。- 遍历数组:
- 遍历数组
nums,使用src指针从0开始遍历。- 如果
nums[src]不等于val,则将nums[src]的值赋给nums[dst],并且dst指针向后移动一位(dst++,在Python中表示为dst += 1)。- 如果
nums[src]等于val,则只移动src指针,dst指针保持不变。- 返回结果:
- 遍历完成后,
dst指针的值即为不等于val的元素数量。- 返回
dst即可。
题目要点
原地操作:不增加额外空间,直接在原数组上修改。
双指针:利用两个指针遍历数组,一个记录结果,一个用于遍历。
顺序可变:输出元素可不必保持原顺序。
返回数量:最终返回非目标值的元素数量。
完整代码(C语言)
int removeElement(int* nums, int numsSize, int val) {int dst,src = 0;while(src < numsSize){//src的值为val,src往后走//src的值不为val,src赋值给dst,src和dst都往后走if(nums[src] != val){nums[dst] = nums[src];dst++;}src++;}return dst; }
兄弟们共勉 !!!
码字不易,求个三连
抱拳了兄弟们!


