在数组中一般就有三种双指针:第一种就是同侧的快慢指针,第二种就是相向的对撞指针,第三种就是从中间向两边的背向指针。
LeetCode27 移除元素
这道题就可以用三种双指针来解决。
第一种:快慢指针
class Solution {
public int removeElement(int[] nums, int val) {
int slow = 0;
for(int fast = 0;fast < nums.length;fast++)
if(val != nums[fast])
nums[slow++] = nums[fast];
return slow;
}
}
第二种:对撞指针
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[right] != val){
int t = nums[left];
nums[left] = nums[right];
nums[right] = t;
}
if(nums[left] != val)
left++;
if(nums[right] == val)
right--;
}
return left;
}
}
第三种:对撞+覆盖
class Solution {
public int removeElement(int[] nums, int val) {
int right = nums.length - 1;
for(int left = 0;left <= right;){
if(nums[left] == val){
nums[left] = nums[right];
right--;
}else{
left++;
}
}
return right + 1;
}
}