首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从排序数组中删除重复-我不明白为什么我的解决方案在某些情况下不能工作

从排序数组中删除重复-我不明白为什么我的解决方案在某些情况下不能工作
EN

Stack Overflow用户
提问于 2021-11-30 08:24:45
回答 1查看 86关注 0票数 0

我正在试图解决一个Leetcode问题“从排序数组中删除重复项”。但我的解决方案只适用于某些情况。我试着调试它,查看Quokka.js上的结果。但我还是不明白为什么我会在myArr2上得到这个奇怪的结果。任何人都能帮助一个愚蠢的人??提前结束。

我的解决办法是

代码语言:javascript
复制
    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按非递减顺序排序.

EN

回答 1

Stack Overflow用户

发布于 2022-06-23 17:44:05

这是Value Type和Reference Type的情况。您正在尝试从num数组中移除该数字,这也会影响原始数组。下面是我在Python中的代码,您可以查看:

代码语言:javascript
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70166280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档