我正在试图解决一个Leetcode问题“从排序数组中删除重复项”。但我的解决方案只适用于某些情况。我试着调试它,查看Quokka.js上的结果。但我还是不明白为什么我会在myArr2上得到这个奇怪的结果。任何人都能帮助一个愚蠢的人??提前结束。
我的解决办法是
let myArr = [0, 0, 1, 1, 2, 2];
let myArr2 = [0, 0, 1, 1, 1, 2, 2, 3, 3, 4];
const removedDuplicates = (nums) => {
let k;
for (let i = 0; i < nums.length; i++) {
console.log("nums: ", nums);
console.log(nums.length);
// console.log("I'm I: ",i);
if (nums[i] == nums[i + 1]) {
nums.splice(nums[i + 1], 1);
console.log("after ", i + 1, " iteration nums: ", nums);
}
}
k = nums.length;
return k;
};
console.log(removedDuplicates(myArr)); // [0,1,2]
console.log(removedDuplicates(myArr2)); // [0,1,2,3,3,4] ... Why is "3" still in the array??
下面是问题所在,或者您可以检查问题这里
给定按非递减顺序排序的整数数组num,移除就地重复的项,使每个唯一元素只出现一次。元素的相对顺序应该保持不变。 由于不可能在某些语言中更改数组的长度,所以必须将结果放在数组num的第一部分。更正式地说,如果删除重复项后有k个元素,那么num的第一个k元素应该保存最终结果。除了第一个k元素之外,您留下的内容并不重要。 在将最终结果放置在num的前k个槽中后返回k。 不要为另一个数组分配额外的空间。要做到这一点,必须修改输入数组中的O(1)额外内存. 海关法官: 法官将用以下代码测试您的解决方案: int[] num=.;//输入数组int[] expectedNums =.;//长度正确的预期答案 int k= removeDuplicates(nums);//调用您的实现 断言k == expectedNums.length;for (int = 0;i< k;i++) { assertions == expectedNumsi;}如果所有断言都通过,那么您的解决方案将被接受。 示例1: 输入:num= 1,1,2输出: 2,num= 1,2,_解释性:函数应该返回k= 2,其中的前两个元素分别是1和2。在返回的k(因此它们是下划线)之后,您留下什么并不重要。示例2: 输入:num= 0,1,1,1,2,2,3,3,4输出: 5,num= 0,1,2,3,4,,,您的函数应该返回k= 5,其中num的前五个元素分别是0、1、2、3和4。在返回的k(因此它们是下划线)之后,您留下什么并不重要。 制约因素: 0 <= nums.length <= 3*104-100 <= numsi <= 100 num按非递减顺序排序.
发布于 2022-06-23 17:44:05
这是Value Type和Reference Type的情况。您正在尝试从num数组中移除该数字,这也会影响原始数组。下面是我在Python中的代码,您可以查看:
def removeDuplicates(self, nums: List[int]) -> int:
expectedItem = nums[:]
myarr = []
for i in range(len(expectedItem)):
if expectedItem[i] not in myarr :
myarr.append(expectedItem[i])
else:
nums.remove(expectedItem[i])
return len(nums);https://stackoverflow.com/questions/70166280
复制相似问题