输入:数组 nums 和目标值 target。
要求:原地移除数组中所有等于 target 的元素,并返回新数组长度。
输出:新数组的前若干元素顺序保持不变。
思路:快慢双指针法。
-
定义慢指针
slow表示下一个!= target元素应放置的位置; -
快指针
fast用于遍历数组。 -
当
fast遇到!= target的元素时,将其赋值到slow位置,并移动slow一步。 -
遍历结束后,
slow的值即为新数组的长度。
时间复杂度:O(n),空间复杂度:O(1)。
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int slow = 0;
int len = nums.size();
for (int i = 0; i < len; i++) {
if (nums[i] != val) {
nums[slow++] = nums[i];
}
}
return slow;
}
};

1430

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



