From 030e04b5d24fca39e1c6f4b4f38936a994ed0287 Mon Sep 17 00:00:00 2001 From: LouisFonda Date: Tue, 4 Mar 2025 22:50:03 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=A7=BB=E9=99=A4=E5=85=83=E7=B4=A0lee?= =?UTF-8?q?tcode25?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- leetcode/简单/移除元素(25).js | 65 +++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 leetcode/简单/移除元素(25).js diff --git a/leetcode/简单/移除元素(25).js b/leetcode/简单/移除元素(25).js new file mode 100644 index 0000000..47eb203 --- /dev/null +++ b/leetcode/简单/移除元素(25).js @@ -0,0 +1,65 @@ +/* +给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 + +假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作: + +更改 nums 数组,使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。 +返回 k。 +*/ + +// 示例 1: + +// 输入:nums = [3,2,2,3], val = 3 +// 输出:2, nums = [2,2,_,_] +// 解释:你的函数函数应该返回 k = 2, 并且 nums 中的前两个元素均为 2。 +// 你在返回的 k 个元素之外留下了什么并不重要(因此它们并不计入评测)。 + +/** + * @param {number[]} nums + * @param {number} val + * @return {number} + * 思路:题目只需要我们修改元素组,并且保证元素组的前k个元素是于val不同即可,脑袋里面想到的第一个思路,就是遍历一遍把 + * 这k个与val不同的元素找出来,存入一个新的数组,之后再遍历新数组,把这k个元素替换到元素组 + */ +const removeElement1 = function (nums, val) { + const arr = []; + let k = 0; + for (const num of nums) { + if (num !== val) { + arr.push(num); + k++; + } + } + + for (let i = 0; i < arr.length; i++) { + nums[i] = arr[i]; + } + return k; +}; + +/** + * + * @param {number[]} nums + * @param {number} val + * @returns number + * 思路:使用快慢指针,快指针遍历整个数组,找出与val不同的元素,快慢指针初始都指向第一个元素,当快指针找到 + * 与val不同的元素的时候就把当前元素的值赋值给慢指针的位置,之后慢指针往后移动一位,重复上一次操作。 + * + * 思考:因为快指针会优先移动去寻找与val不同的元素,所以一次遍历下来能找到所有的与val不同的元素,当找到时,slow所在 + * 的位置一定是无效位置,要么时与val值相同的位置,要么是已经赋值之后的无效位置,所以不用担心值被覆盖的问题 + */ +function removeElement(nums, val) { + let slow = 0; // 慢指针,指向不等于 val 的部分末尾 + for (let fast = 0; fast < nums.length; fast++) { + if (nums[fast] !== val) { + nums[slow] = nums[fast]; + slow++; + } + } + return slow; // 新数组长度 +} + +const testArr = [3, 2, 2, 3]; + +removeElement(testArr, 3); +console.log(testArr);