从排序数组中删除重复项 - 尝试理解答案(leetcode)

问题描述 投票:0回答:1

我正在尝试回答 Leetcode 问题“从排序数组中删除重复项”,但我不确定我是否理解其中的逻辑。这就是挑战:

给定一个按非降序排序的整数数组 nums,删除 就地复制,以便每个唯一元素仅出现一次。 元素的相对顺序应保持相同。然后 返回 nums 中唯一元素的数量。

设 nums 中唯一元素的个数为 k,可得 接受后,您需要做以下事情:

更改数组 nums,使 nums 的前 k 个元素包含 唯一元素按照它们最初出现在 nums 中的顺序排列。 nums 的其余元素和大小一样不重要 数。返回 k.

这是答案之一:

class Solution:
    def removeDuplicates(self, nums: List[int]) -> int:
        i,j=0,1
        while i<=j and j<len(nums):
            if nums[i]==nums[j]:
                j+=1
            else:
                nums[i+1]=nums[j]
                i+=1
        return i+1

我没能得到的是这个:

            if nums[i]==nums[j]:
                j+=1

想象我们有这个数字列表 [1,1,2,3,5,6,7,7,8,7],

为什么如果索引 i 处的值 == 索引 j 处的值我们只向 j 加 1? 我从这个脚本中了解到的是,它不会删除任何重复的 (1,1) ,它只是将 j 更改为 2 ,并且 i 仍然小于 j (while 循环), 我在这里缺少什么?

我试图做这样的事情,但由于索引错误而失败(我明白为什么但还没有解决):

class Solution:
    def removeDuplicate(self, 
                      nums: list, 
                      ) -> int:
        k=1

        for i in range(1,len(nums)):
            print(i,i-1)
            print(nums)
            if nums[i] == nums[i-1]: 
                
                del nums[i]

        return k



solution_instance = Solution()

nums = [1,1,2,3,5,6,7,7,8,7]
solution_instance.removeDuplicate(nums)

python list duplicates
1个回答
0
投票

我认为如果只想计算 k,很容易实现。参考下文

class Solution:
    def removeDuplicates(self, nums:list) -> int:
        print(nums)
        uniq_list=list(set(nums))
        input_len=len(nums)
        uniq_len=len(uniq_list)
        k=input_len-uniq_len
        return k
solu=Solution()
lis=[0,0,1,1,1,2,2,3,3,4]
print(solu.removeDuplicates(lis)) #output value 5
© www.soinside.com 2019 - 2024. All rights reserved.