用快慢指针来做
代码
public class Test {
public static void main(String[] args) {
int[] nums = {3,2,2,3};
Solution solution = new Solution();
System.out.println(solution.removeElement(nums, 3));
for (int i = 0; i < nums.length; i++) {
System.out.printf(nums[i] + " ");
}
System.out.println();
}
}
class Solution {
public int removeElement(int[] nums, int val) {
int n = nums.length;
int slow = 0;
int fast = 0;
while (fast < n) {
if (nums[fast] == val) {
fast++;
continue;
}
nums[slow] = nums[fast];
fast++;
slow++;
}
return slow;
}
}
public int removeElement(int[] nums, int val) {
// 慢指针slow 区间[0,slow)内的元素为值不等于val的元素
int slow = 0;
for(int fast = 0; fast < nums.length; fast++) {
// 快指针fast所指向的元素值不等于val=3
// 将其值赋值于慢指针所在位置
if (nums[fast] != val) {
nums[slow] = nums[fast];
// 赋值完毕之后,慢指针右移一位,等待下一次赋值
slow++;
}
}
return slow;
}



