移除元素

移除元素

https://leetcode.cn/problems/remove-element/description/

单指针法

图 0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var removeElement = function (nums, val) {
// 单指针
let size = nums.length
let i = 0
while (i < size) {
if (nums[i] === val) {
for (let j = i; j < size; j++) {
nums[j] = nums[j + 1]
}
size--
} else {
i++
}
}
return size
}
由于题目没有要求顺序问题,所以不一定要和上面一样,把所有数字往前移。 核心逻辑,发现和目标值一样的数,用数组的最后一位代替当前数,然后数组size--
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var removeElement = function(nums, val) {
// 单指针
let size = nums.length
let i=0
while(i<size){
if (nums[i] === val){
nums[i] = nums[size-1]
size--
}
else{
i++
}
}
return size
};

双指针法

图 1

双指针法(快慢指针法): 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。

定义快慢指针
快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
慢指针:指向更新 新数组下标的位置

1
2
3
4
5
6
7
8
9
10
11
12
13
var removeElement = function (nums, val) {
// 双指针法
let slow =0;
let fast = 0;
while(fast < nums.length){
if(nums[fast] !== val){
nums[slow] = nums[fast];
slow++;
}
fast++;
}
return slow;
}