给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
题解一
使用暴力法
循环遍历数组,如果遇到删除的那个元素则将后续元素提前覆盖
class Solution { public: int removeElement(vector& nums, int val) { int size=nums.size(); for (int i = 0; i < size; i++) { if(nums[i]==val){ for(int j=i+1;j 题解二
使用快慢指针
让快指针遍历数组,然后将与删除元素不相同的元素重新存入数组,最后返回重新存放数组的元素个数
class Solution { public: int removeElement(vector& nums, int val) { int slow=0; for (int fast = 0; fast < nums.size(); fast++) { if(nums[fast]!=val){ nums[slow++]=nums[fast]; } } return slow; } }; 欢迎分享,转载请注明来源:内存溢出
评论列表(0条)