题目:

示例:

实现思路:要求空间复杂度为O(1),那我们就不能使用额外的空间,这个时候我们能想到的只有双指针法。同样定义两个快慢指针slow、fast,fast用于遍历数组。按照之前我的想法是,从前往后遍历数组,当nums[fast] == val时,slow++,这个时候slow指向的数据可能也和val相同,这就导致没有办法进行替换。所以我们改变一下思路,我们从后往前遍历数组,slow、fast分别指向数组最后一个元素,然后比较nums[fast]是否与val相同,如果不同,fast--,直到找到相同的元素,此时nums[fast] = nums[slow],并让slow--即可。
代码实现:
class Solution {
public int removeElement(int[] nums, int val) {
int slow = nums.length-1;
int fast = nums.length-1;
while(fast>=0){
if(nums[fast] == val){
nums[fast] = nums[slow];
slow--;
}
fast--;
}
return slow+1;
}
}
本文介绍了如何在O(1)空间复杂度下,通过双指针法解决LeetCode上的一个问题,即移除数组中与指定元素相同的元素。详细解释了实现思路,从后往前遍历数组,遇到不相同的元素则替换前面的相同元素。
470

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



