27. 移除元素
思路
当初我第一反应是合情合理的直接遍历删- -
可是数组删元素 必然涉及到元素的迁移 时间复杂度可想而知哦
暴力代码就不贴了 直接说改进后的
双指针
前后两个指针:front和after
front是找元素的,after负责盯元素,如果当前元素是需要删除的元素,那么front向前移动,after等候。
如果front当前元素是不需要删除的,那么就把front的值赋给after,然后一起向后移动一格。
核心思想就是front不断移动,把不需要删除的元素交给after。after看管不需要删除的元素,如果确定当前是不需要删除的元素就向前挪一步,用于记录,如果是需要删除的元素,就等待front找到不需要删除的。最终返回after。
说白了就是挪呗 上代码
class Solution {
public int removeElement(int[] nums, int val) {
int front = 0;
int after = 0;
for (; front < nums.length; front++) {
if (nums[front] != val){
nums[after] = nums[front];
after++;
}
}
return after;
}
}