元素前移法(双指针)
核心思想: 从下标0开始,依次将有序数组中的值不等于val的元素添加到数组中,并利用count统计数组中值不等于val的元素的个数,即移除后数组的新长度。简单地说,就是把数组中值不等于val的元素依次前移到数组的开始位置。
class Solution {
public int removeElement(int[] nums, int val) {
int count = 0;//数组中不等于val的元素的个数
for(int i = 0; i < nums.length; i++){
if(nums[i] != val){
nums[count++] = nums[i];//从下标0开始将不等于val的元素添加到数组中
}
}
return count;
}
}
元素前移法(双指针)-优化
核心思想: 由于上述解法中存在值不等于val的元素的重复赋值操作的不足,例如待移除元素为数组的首元素时,数组中其他值不为val的元素需依次向前移动。
class Solution {
public int removeElement(int[] nums, int val) {
int left = 0;//左指针
int right = nums.length - 1;//右指针
while(left <= right){
if(nums[left] == val)//左指针元素的值等于val
nums[left] = nums[right--];//用右指针指向元素替换左指针元素
else
left++;
}
return left;
}
}