力扣链接:27.移除元素
难度:⭐
✏️ 方法一:
解题关键词:数组
、双指针
解题思路:使用两个指针,一直往后移动,如果后面指针不等于 target,那么将后面指针赋值到前一个指针指向的地方,并往后移动。
WARNING
这种方法有一个缺点就是:如果数组是 [1, 2, 3, 4, 5],然后要移除的元素是 1 时,这时 1 后面的元素都要往前移动。这时可以使用方法二
typescript
function removeElement(nums: number[], val: number): number {
let length = nums.length;
let left = 0;
for (let i = 0; i < length; i++) {
// 如果不等于要移除的元素,那么赋值到 left 指针的地方,同时 left 指针往后移动
if (nums[i] !== val) {
nums[left++] = nums[i];
}
}
return left;
}
✏️ 方法二:
解题关键词:数组
、双指针
解题思路:使用两个指针,一个在最前面,一个在最后面,如果前面的指针不等于 target,那么一直往后移动,否则将最后面的元素赋值到前面指针的地方,直到两个指针相遇。
typescript
function removeElement(nums: number[], val: number): number {
let left = 0;
// 这里右指针一定要指向外面,如果指向最后一个元素的话,会少处理一个元素
let right = nums.length;
while (left < right) {
// 不相等,左指针右移
if (nums[left] !== val) {
left++;
} else {
// 将后面元素放到前面,同时后面指针向前移动
nums[left] = nums[right - 1];
right--;
}
}
return left;
}