题源力扣:
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
要求:空间复杂度 O(1);元素的顺序可以改变
C++:
时间复杂度O(n),将数组变成有序后,用后面元素替换值为val的元素
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
sort(nums.begin(),nums.end());//形成有序数组
int cond=nums.size();
for(int i=0;i<nums.size();i++){
if(nums[i]==val){
nums[i]=nums[cond-1];
cond--;
}
}
return cond;
}
};
另:采用STL源码remove()函数
remove()返回指向尾值的迭代器;
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
return remove(nums.begin(),nums.end(),val)-nums.begin();
}
};