用双指针解决,其中定义两个快慢下标,fast下标会依次遍历所有元素,每次循环都会进行加1操作,而slow下标指向的是新数组(即slow走过后前面的所有元素都不可能再有移除后的元素),其加1条件是当fast遍历新元素不是需要移除的元素时便将该元素移到slow指向的位置(slow既指向下一元素在新数组中的位置,也表示新数组中有多少元素数目,故最后返回slow的值)
class Solution {
public int removeElement(int[] nums, int val) {
int slow = 0;
int fast = 0;
for(int i = nums.length; i>0;i--,fast++){
if(nums[fast] != val){
nums[slow] = nums[fast];
slow++;
}
}
return slow;
}
}

969

被折叠的 条评论
为什么被折叠?



