题目:
示例:
实现思路:要求空间复杂度为O(1),那我们就不能使用额外的空间,这个时候我们能想到的只有双指针法。同样定义两个快慢指针slow、fast
,fast
用于遍历数组。按照之前我的想法是,从前往后遍历数组,当nums[fast] == val
时,slow++
,这个时候slow指向的数据可能也和val相同,这就导致没有办法进行替换。所以我们改变一下思路,我们从后往前遍历数组,slow、fast
分别指向数组最后一个元素,然后比较nums[fast]是否与val相同
,如果不同,fast--
,直到找到相同的元素,此时nums[fast] = nums[slow],并让slow--
即可。
代码实现: