移除元素问题解决方法------LeetCode-OJ题

简介: 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

问题:

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

要求:

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

OJ代码:

int removeElement(int* nums, int numsSize, int val){

int src=0;
int des=0;
while(src<numsSize)
{

if(nums[src]!=val)
{
    nums[des++]=nums[src++];

}
else
{
    ++src;
}

}
return des;
}

解析:

src,des,是数组的两个下标。通过这两个下标的移动来给数组赋值。

假设输入的val是 2

while(src<numsSize) 成立,进入循环

nums[src] ! = val 所以if 条件成立。执行语句 nums[des++] = nums[src++];

也就是把nums[src] 的值赋值给 nums[des];

再进行加一操作。

它会判断现在的src 是否满足循环的条件,如果小于numsSize 则继续进行,

如果不满足条件,就会退出循环。

现在,nums[src] = = val; 进行else 语句

++src; 就是 src 下标进行加一操作,不进行赋值操作。

因为我们的目的就是移除 val 元素,保持des下标不变,最后要返回数组。

src加一后 nums[src] 就又不等于 val 了,所以继续执行if 语句。

nums[src] 的值赋值给 nums[des];

所以现在 nums[src]的值就是 3

两个下标再进行加一操作。

它会判断现在的src 是否满足循环的条件,如果小于numsSize 则继续进行,

如果不满足条件,就会退出循环。

现在 nums[src] 又等于 val; 所以进行else 语句。

src 下标进行加一操作,不进行赋值操作。

加一之后,nums[src] 又还等于 val; 所以还是进行else 语句。

此时, nums[src] 就不等于 val 了,所以执行if 语句。

nums[src] 的值赋值给 nums[des];

所以nums[des] 的值就是 4 了。

两个下标再进行加一操作。

nums[src] 又不等于 val 了,所以继续执行if 语句。

nums[src] 的值赋值给 nums[des];

所以现在 nums[src]的值就是 3

此时两个下标再进行加一操作

但是,scr的值会超过numsSize,所以会跳出循环。

然后 return des; 所以现在的数组就是移除val 值后的数组了。

目录
相关文章
|
1月前
|
存储 算法
LeetCode第83题删除排序链表中的重复元素
文章介绍了LeetCode第83题"删除排序链表中的重复元素"的解法,使用双指针技术在原链表上原地删除重复元素,提供了一种时间和空间效率都较高的解决方案。
LeetCode第83题删除排序链表中的重复元素
|
1月前
|
算法 索引
LeetCode第34题在排序数组中查找元素的第一个和最后一个位置
这篇文章介绍了LeetCode第34题"在排序数组中查找元素的第一个和最后一个位置"的解题方法,通过使用双指针法从数组两端向中间同时查找目标值,有效地找到了目标值的首次和最后一次出现的索引位置。
LeetCode第34题在排序数组中查找元素的第一个和最后一个位置
|
1月前
|
Python
【Leetcode刷题Python】剑指 Offer II 082. 含有重复元素集合的组合
解决LeetCode平台《剑指 Offer II 082. 含有重复元素集合的组合》题目的Python代码实现,通过深度优先搜索算法找出所有和为特定目标值的数字组合,并在搜索过程中通过排序和跳过重复元素来避免解集中出现重复组合。
37 2
|
1月前
|
算法
LeetCode第27题移除元素
这篇文章介绍了LeetCode第27题"移除元素"的解题方法,通过使用双指针技巧,有效移除数组中特定值的元素并返回新数组的长度。
|
1月前
|
算法 索引 Python
【Leetcode刷题Python】34. 在排序数组中查找元素的第一个和最后一个位置(二分查找)
解决LeetCode "在排序数组中查找元素的第一个和最后一个位置" 问题的方法。第一种方法是使用两次二分查找,首先找到目标值的最左边界,然后找到最右边界。第二种方法是利用Python的list.index()方法,先正序找到起始位置,再逆序找到结束位置,并给出了两种方法的Python实现代码。
46 0
|
1月前
|
Python
【Leetcode刷题Python】203.移除链表元素
文章提供了三种删除链表中特定值节点的方法:迭代法、虚拟节点迭代删除法和递归法,并给出了相应的Python实现代码。
15 0
|
3月前
|
算法
【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素
【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素
|
3月前
|
算法 搜索推荐 Java
【经典算法】LeetCode 215. 数组中的第K个最大元素(Java/C/Python3实现含注释说明,Medium)
【经典算法】LeetCode 215. 数组中的第K个最大元素(Java/C/Python3实现含注释说明,Medium)
28 3
|
2月前
2670.找出不同元素数目差数组-力扣(LeetCode)
2670.找出不同元素数目差数组-力扣(LeetCode)
21 0
|
3月前
|
存储 算法 Java
力扣经典150题第四十五题:存在重复元素 II
力扣经典150题第四十五题:存在重复元素 II
23 0