题目描述:
给你一个数组 nums
和一个值 val
,你需要 原地 移除所有数值等于 val
的元素。元素的顺序可能发生改变。然后返回 nums
中与 val
不同的元素的数量。
假设 nums
中不等于 val
的元素数量为 k
,要通过此题,您需要执行以下操作:
- 更改
nums
数组,使nums
的前k
个元素包含不等于val
的元素。nums
的其余元素和nums
的大小并不重要。 - 返回
k
。
题解:
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
vector<int> num;
int j=0;
int n=nums.size();//出错点
num.resize(n);
for(int i=0;i<n;i++){
if(nums[i]!=val){
num[j]=nums[i];
j++;
}
}
for(int i=0;i<j;i++){
nums[i]=num[i];
}
return j;
}
};
解题思路 :
遍历一遍原数组,将与val值不同的元素取出,放入备用数组中,最后将备用数组的元素复制到原数组中,返回备用数组的大小作为函数返回值。
出错点:
返回vector数组的大小函数为size(),非length()!
学习点:
1. vector容器的常用函数:
push_back(x):就是在vector后面添加一个元素x
pop_back():用于删除vector的尾元素
size():用来获得vector中元素的个数
clear():用来清空vector中的所有元素
insert(it,x):用来向vector的任意迭代器it处插入一个元素x
erase():
删除单个元素,erase(it)即删除迭代器为it处的元素。
删除一个区间内的所有元素,erase(first,last)即删除[first,last)内的所有元素
清空vector也可以使用v.erase(v.begin() , v.end());
2. vector容器构造/初始化:
vector<int> sdt;//无参构造
vector<int> s1(4,100);//构造并初始化容量为4,元素所有值为100的数组
vector<int> s2(s1.begin(), s1.end());//使用迭代器进行初始化构造
vector<int> s3(s1);//拷贝构造
所以上述代码中num数组初始化可以写:
int n=nums.size();
vector<int> num(n);