移除元素 Posted on 2021-07-08 00:00:00 2021-07-08 00:00:00 by Author 摘要 给定一个数组并且给定一个数target,你能原地移除数组中值为target的元素吗??????? # 移除元素 1. 题目描述:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并**原地**修改输入数组。 2. 示例描述: - 示例一: - 输入:nums={3,2,2,3},val=3 - 输出:2 - 解释:nums数组移除val=3的值,数组nums={2,2},长度为2。 - 示例二: - 输入:nums = {0,1,2,2,3,0,4,2}, val = 2 - 输出:5 - 解释:nums数组移除val=2,nums={0,1,3,0,4,2},长度为5 3. 解题思路:快慢指针解法,首先定义两个指针(fast,slow),起初分别指向下标为0的位置,然后快指针先走,如果快指针所在小标元素为需要移除的元素,那么继续寻找,直到找到是需要删除的元素位置,然后移动当前不为删除的元素到慢指针所在的位置,之后慢指针与快指针同时移动,依次执行以上步骤,直到快指针到达数组尾部,结束循环,返回slow的值,即为删除元素后数组的长度(为什么不返回slow+1,而是返回slow,因为是先给slow指针所在数组元素赋值,然后slow++,结束循环以后,起始solw已经加一,即为删除元素后,数组的长度,所以直接返回slow即可)。 4. 代码实现: ```java public int removeElement(int[] nums, int val) { //定义快慢指针,分别指向数组为0的位置 int slow = 0, fast = 0; //直到快指针移动到数组尾部,结束操作 while (fast < nums.length) { //如果当前快指针指向的值刚好等于所需要删除的值 //继续查找下一个不为val的值,覆盖当前的值 if (nums[fast] == val) { fast++; continue; } //如果当前fast指针指向的值不等于val, //就覆盖之前等于val的值,同时慢指针往后移动, //以便下次继续进行删除所给定val的值 if (nums[fast] != val) { nums[slow++] = nums[fast++]; } } //返回结果 return slow; } ```
{{ item.content }}
{{ child.content }}