移除元素
https://leetcode.cn/problems/remove-element/description/
单指针法
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 };
|
双指针法
双指针法(快慢指针法): 通过一个快指针和慢指针在一个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; }
|