双指针是在一次for循环中使用两个指针完成需要两个for循环的工作。
其主要有两种方法:
快慢双指针:从一端开始,设置两个速度不一样的指针进行遍历。
public int removeElement(int[] nums, int val){
int fast = 0;
int slow = 0;
for(; fast < nums.length; fast++){
if(nums[fast] != val){
nums[slow] = nums[fast];
slow++;
}
}
return slow;
}
首位双指针:从两头开始,一起遍历。
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{
left++;
}
}
return left;
}