leetcode移除元素
2023-12-16 06:52:15
题目
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
分析
题目要求空间复杂度为O(1),我们先思考用两个数组来进行该过程,再优化空间
-
此处使用big,small为下标,下方数组接收不是目标值的其他元素,big在这里用作遍历的"指针"(非指针),每次都会跳向下一个直到数组结束
-
如果big指向的数组元素不等于目标值,small就要接收并往后移动一格
-
下方数组的结果就是我们要得到的结果
-
现在我们要把操作放在同一个数组中进行操作
-
始终记得big指针(非指针,只是想说明big指向数组元素形象而已)是用来遍历元素而对数组元素不会改变,small是用来修改数组的,big指针遍历的过程中,big只要指向的不是val元素(看原题),small会覆盖当前值,并向后挪动
题解代码:
c++版本
class Solution {
public:
int removeElement(vector<int>& nums, int val)
{
int big = 0;
int small = 0;
while(big<nums.size())
{
if(nums[big] != val)
nums[small++] = nums[big];
big++;
}
return small;
}
};
c版本
int removeElement(int* nums, int numsSize, int val)
{
int big = 0;
int small = 0;
while(big<numsSize)
{
if(nums[big]!=val)
nums[small++] = nums[big];
big++;
}
return small;
}
文章来源:https://blog.csdn.net/tulingtuling/article/details/134954946
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!