先用一个双指针用错了,在头尾分别记录索引
代码如下
public static int removeElement(int[] nums, int val) {
//相向双指针
int left=0;
int right=nums.length-1;
// 把right位置移动到不为val的位置
while(right>0&&nums[right]==val)right--;
while(left<=right){
// 删除元素
if(nums[left]==val){
nums[left]=nums[right];
right--;
}
left++;
// 保障right不为val
while(right>0&&nums[right]==val)right--;
}
if(nums.length>0&&nums[0]==val)return 0;
return left;
}
期间遇到了各种各样的麻烦,主要就是数组为空的情况
快慢双指针
class Solution {
public static int removeElement(int[] nums, int val){
//慢指针
int slowIndex=0;
for(int fastIndex=0;fastIndex<nums.length;fastIndex++){
//如果快指针等于val,让慢指针不变
if(nums[fastIndex]!=val){
nums[slowIndex]=nums[fastIndex];
slowIndex++;
}
}
return slowIndex;
}
}
快慢指针比相向指针好多了,不用考虑特殊情况(考虑特殊情况发现也是符合的)
相向指针之前自己写一直改改改,看了题解才改出来