gpt4 book ai didi

javascript - 从 Javascript 中的数组中删除重复项(不修改数组)——理解背后的逻辑

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:07:21 25 4
gpt4 key购买 nike

我开始使用一个名为 leetcode 的网站,其中一个问题是在不创建新数组的情况下删除数组中的所有重复项。这里是问题https://leetcode.com/problems/remove-duplicates-from-sorted-array/description/ 我的解决方案是循环检查每个元素与下一个元素的对比,然后如果匹配则使用 splice 删除重复的元素。它有效,但当你有类似 [1,1,1,1,1] 或 [1,1,2,2,2,2,3,3] 这样的东西时就不行了,所以我在 github 上找到了工作代码:

var removeDuplicates = function(nums) {
var i = 0;
for (var n in nums)
if (i === 0 || nums[n] > nums[i-1])
nums[i++] = nums[n];
return i;
};

此代码有效并通过了所有 160 次测试,但我不清楚在做什么,尤其是 nums[i++] = nums[n]; 中的部分帮助我理解这个简单的代码在做什么?谢谢

最佳答案

考虑这段创建新数组的代码:

function removeDuplicates(nums) {
var res = [];
var i = 0;
for (var j=0; j<nums.length; j++)
if (i === 0 || nums[j] !== res[i-1])
res[i++] = nums[j];
return res;
}

当值与前一个不同时,您要询问的行将 nums[j] 分配为 res[i] 的新元素(res[i-1]),然后递增 i 以将下一个非重复值放在下一个位置。

现在我们使用相同的算法,但不是分配给新的 res 数组,而是修改原始的 nums 数组:

function removeDuplicates(nums) {
var i = 0;
for (var j=0; j<nums.length; j++)
if (i === 0 || nums[j] !== nums[i-1])
nums[i++] = nums[j];
nums.length = i; // drop the rest
}

鉴于 j >= i 是有保证的,我们只修改我们一直访问的数组元素,所以在我们正在读取的同一个数组上写入没有坏处。

关于javascript - 从 Javascript 中的数组中删除重复项(不修改数组)——理解背后的逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55110417/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com