package com.arrays.java;
public class two {
//方法一:暴力解法 使用双层for循环
public int removeElement(int[] nums, int val) {
int size = nums.length;
for(int i = 0; i < size; i++) {
if(nums[i] == val) {
//后面元素向前移动
for(int j = i+1;j < size;j++) {
nums[j-1] = nums[j];
}
i--;//因为移动了元素,为了下一轮i的指向不变
size--;
}
}
return size;
}
//方法二:双指针 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作
public int removeElement1(int[] nums, int val) {//例如nums=[1,2,3,3,4,5,3,6]
int slowIndex = 0;
for(int fastIndex = 0; fastIndex < nums.length; fastIndex++) {
//其实可以把快慢指针想象成指向两个不同数组的指针(实际指向同一个数组)
//慢指针指向一个可以变长的空数组,该数组用来追加非val数
//快指针用来遍历nums数组,找到非val数,并添加到慢指针的数组
if(nums[fastIndex] != val) {
nums[slowIndex] = nums[fastIndex];
slowIndex++;
}
}
return slowIndex;
}
}



