解法1
双指针
第一个指针 从左到右,一直放不重复元素。
第二个指针 从左到右滑动数组。
class Solution {
public int removeElement(int[] nums, int val) {
int j = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] != val) {
nums[j++] = nums[i];
}
}
return j;
}
}
解法2
双指针
左右双指针
左指针每次放不等于val元素。
若左指针指向的值为val,则将右指针拷贝到左指针,右指针左移
若左指针指向的值不为val,则left右移
class Solution {
public int removeElement(int[] nums, int val) {
int left = 0, right = nums.length - 1;
while (left <= right) {
if (nums[left] == val) {
nums[left] = nums[right];
right--;
} else {
left++;
}
}
return left;
}
}