深圳网站域名注册,一些好玩的网站,如何留住网站用户,8有免费建网站给定一个数组#xff0c;在数组中删除等于这个目标值的元素#xff0c;然后返回新数组的大小
数组理论#xff1a; 数组是一个连续的类型相近的元素的一个集合#xff0c;数组上的删除是覆盖#xff0c;只能由后面的元素进行覆盖#xff0c;而不能进行真正意义上的地理位…给定一个数组在数组中删除等于这个目标值的元素然后返回新数组的大小
数组理论 数组是一个连续的类型相近的元素的一个集合数组上的删除是覆盖只能由后面的元素进行覆盖而不能进行真正意义上的地理位置删除。 erase()函数用来删除数组中的某某元素是一个O(n)的操作。当在一个数组中删除一个元素时需要将该元素后面的元素整体向前移动实现一个覆盖的操作。
暴力解题思路 先用for循环遍历数组找到要删除的目标元素 再使用for循环把目标元素后面的元素一个一个向前覆盖以实现元素的删除
双指针思路 使用一个for循环完成暴力解法两个for循环的工作。 定义两个指针一个快指针寻找新数组里所需的元素新数组删除目标元素之后的数 组一个慢指针新数组的下标值当快指针指向的元素不等于目标元素时将快指针获取到的值赋给慢指针。此时慢指针向后移动一位进行更新。当快指针指向的元素等于目标元素时慢指针不更新跳过目标元素实现目标元素的删除。 例 解题一暴力穷举法
class Solution {
public:int removeElement(vectorint nums, int val) {int size nums.size();for(int i 0;i size;i){if(nums[i] val){for(int j i 1; j nums.size(); j)nums[j - 1] nums[j];i--;size--;}}return size;}
};
解法二双指针
class Solution {
public:int removeElement(vectorint nums, int val) {int size nums.size();int slow 0; for(int fast 0; fast size; fast){if(nums[fast] ! val){nums[slow]nums[fast];slow;}}return slow;}
};