/* 移除元素 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作: 更改 nums 数组,使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。 返回 k。 */
public int removeElement(int[] nums, int val) {
//思路:双指针从头和尾遍历数组,如果发现头指针有等于val的,则需要和尾指针指向的非val元素交换位置,保证nums前半部分元素不等于val,后半部分元素等于val
int k = 0;
int l = 0, r = nums.length - 1;//使用双指针分别指向头和尾
while (l < r){
if(nums[l] != val)//如果头指针指向的元素不等于val,说明不用交换位置,则++指向下一个元素
l++;
if (nums[r] == val)//如果尾指针指向的元素等于val,说明不用交换位置,则--指向下一个元素
r--;
if(l >= r)//判断是否越界,需要放在操作指针之后立马判断
break;;
int t = nums[l];//交换头尾元素位置
nums[l] = nums[r];
nums[r] = t;
System.out.println(Arrays.toString(nums));
}
for (int i = 0 ; i <nums.length;i++){
if(nums[i] != val)
k++;//记录非val的元素个数
}
System.out.println(Arrays.toString(nums));
return k;
}