//快慢指针是采用 俩个指针,同步进行移动查找。fast找到满足条件的值时,移动较slow块。 //同向移动 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; }
//相向移动
public int removeElement2(int[] nums, int val) { int slow=0; int fast=nums.length-1; while (slow<=fast){ //这里一定要加等于,让slow指针移动到变换之后的数组最后一位。 while (slow<=fast&&nums[slow]!=val){ slow++; } while (slow<=fast&&nums[fast]==val){ fast--; } if (slow<fast){ nums[slow]=nums[fast]; slow++; fast++; } } return slow; }