feat: 移除元素leetcode25
This commit is contained in:
parent
32033709dc
commit
030e04b5d2
65
leetcode/简单/移除元素(25).js
Normal file
65
leetcode/简单/移除元素(25).js
Normal file
@ -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);
|
Loading…
x
Reference in New Issue
Block a user