这是LeetCode中的一个题目,原题在这里。
问题大意:
给一个数组nums和一个值val,删除数组中的所有值为val的元素,并返回删除后的数组新长度。
解析:
- 两个位置索引,分别是begin, i
- begin表示新数组末尾索引,初始化为0;i表示遍历数组的索引变量,开始为0
- 如果num[i] != val,则num[begin] = num[i],begin和i都加1
- 如果num[i] == val,则begin不变,i加1
时间复杂度为O(n)
,空间复杂度为O(1)
C++实现一
class Solution {
public:
int removeElement(vector<int>& nums, int val)
{
int begin = 0;
for(int i = 0; i < nums.size(); ++i)
{
if(nums[i] != val)
nums[begin++] = nums[i];
}
return begin;
}
};
c++实现二
这里可以使用STL中的remove简化代码
class Solution {
public:
int removeElement(vector<int>& nums, int val)
{
nums.erase(remove(nums.begin(),nums.end(),val), nums.end());
return nums.size();
}
};
本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。转载请注明: 作者staneyffer,首发于我的博客,原文链接: https://chengfy.com/post/6