//法一: 暴力解题 -通用方法 相当于直接遍历一次数组 把不符合的直接用splice方法切掉 然后直接返回修改后数组的长度 var removeElement = function(nums, val) { if (!nums) return //判断数组是否为空数组 这样下面的快慢指针才可以从一开始 并且返回慢指针索引作为数组不重复元素的答案 let fast = 0 while (fast < nums.length) { if (nums[fast] == val) { nums.splice(fast,1) } else { fast++ } } return fast };
//法二: 双指针(快慢指针 慢指针记录输出数组的最后一位索引作为答案返回) 根据题意其实我们不需要直接返回原数组而是只需要返回一个数字长度 那么我们完全可以直接把符合条件的数组放在原数组上面 var removeElement = function(nums, val) { let left = 0 let right = 0 while (right < nums.length) { if (nums[right] != val) { nums[left] = nums[right] left++ } right++ } return left }; console.log(removeElement([3,2,2,3], 3));