1. 快慢指针
class Solution {
// 快慢指针
public int removeElement(int[] nums, int val) {
int slow = 0;
for(int fast=0; fast<nums.length; fast++) {
// 数组元素和目标值一致时,则慢指针不动快指针右移。否则慢指针右移且数组元素左移
if(nums[fast] != val) {
nums[slow] = nums[fast];
slow++;
}
}
return slow;
}
}
2. 双向指针(注意边界情况)
不大理解边界情况,二刷标记
/ 相向双指针法(版本二)
class Solution {
public int removeElement(int[] nums, int val) {
int left = 0;
int right = nums.length - 1;
while(left <= right){
if(nums[left] == val){
nums[left] = nums[right];
right--;
}else {
// 这里兼容了right指针指向的值与val相等的情况
left++;
}
}
return left;
}
}
题目不够经典,感觉为了使用双指针而使用双指针。