仅仅作为个人分享
思路:没什么思路,非常典型的双指针算法,使用快慢指针在要被移除的元素将后一个元素覆盖到前一个元素,不能直接remove,不然出题的意义就没有了哈哈哈。也是因为元素在内存地址中是连续的,不能单独删除数组中的某个元素,只能覆盖。
code:
public int removeElement(int[] nums, int val) {
int slowIndex=0;//设置慢指针
for(int fastIndex=0;fastIndex<nums.length;fastIndex++){
//设置条件当快指针指到要被删除的元素时,慢指针停止自增
if(nums[fastIndex] != val){
nums[slowIndex]=nums[fastIndex];//赋值,将快指针的值覆盖到慢指针
slowIndex++;
}
}
return slowIndex;
}
当快指针指到要被删除的元素时,快指针依旧按照循环自增,但是设置了条件if当快指针指到要被删除的元素时,慢指针停止自增,此时慢指针就要比快指针慢一格,将快指针的值赋到慢指针上,所得的就是被覆盖后的元素。