1.移除元素![](https://i-blog.csdnimg.cn/blog_migrate/123e02a15e2097dc5105bbee7591ccfd.png)
链接:
https://leetcode.cn/problems/remove-elementhttps://leetcode.cn/problems/remove-element
题目解读:通过题目我们可以获取到一个数组nums以及其大小numsSize还给定另一个值val,题目的要求是将数组中等于val的值全部删除,同时题目还要求空间复杂度为O(1),也就是不允许再创建数组,这就是题目的大概意思。
解题思路:这里我们可以采用双指针的思路来解决,但是这里要进行修改的是数组中的值,我们可以用两个下标(begin,tail)来代替,最初,我们可以让begin和tail都等于0,由于我们不用考虑超过数组大小的值,然后让tail去遍历整个数组如果nums[tail]!=val,我们就让nums[begin]=nums[tail];同时让begin++ tail++因为原begin的位置已经存放另一个不等于val的数,所以begin也要自加,当tail==numsSize表明数组的访问越界了这时要停止循环,可设置循环条件为tail<numsSize;如果nums[tail]==val 就只让tail++ 总之就是让不等于val的值放在数组的前面,超过数组长度的值直接忽略,此外由于我们每让nums[begin]=nums[tail] begin从0开始自加,所以begin可以看做删除后数组的大小。
图示:
代码展示:
int removeElement(int* nums, int numsSize, int val) {
int begin,tail ;
begin=tail=0;
while(tail<numsSize)
{
if(nums[tail]!=val)
{
nums[begin++]=nums[tail];
}
tail++;
}
return begin;
}
希望你在努力学习的同时,也不要忘记刷题,加油少年!