繁体   English   中英

从排序数组中删除重复项

[英]Remove Duplicates from Sorted Array

给定一个按非递减顺序排序的 integer 数组 nums,就地删除重复项,使每个唯一元素只出现一次。 元素的相对顺序应保持不变。

由于在某些语言中无法更改数组的长度,因此您必须将结果放在数组 nums 的第一部分。 更正式地说,如果在删除重复项后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。 除了前 k 个元素之外,你留下什么并不重要。

将最终结果放入 nums 的前 k 个槽位后返回 k。

不要为另一个数组分配额外的空间。 您必须通过使用额外的 O(1) memory 就地修改输入数组来执行此操作。以下是代码示例

class Solution(object):
    def removeDuplicates(self, nums):
        c = []
    for x in range(len(nums)-1):
        if nums[x] != nums[x+1]:
            c[x] = nums[x]
        self = len(c)
        print(self,c)

我得到一个错误,说 nums 没有定义,但在 leetcode 中它应该自动定义它。 那么为什么我会收到此错误?

c 列表被初始化为一个空列表,但它从不用于存储任何值。 相反,您应该直接修改 nums 。 该循环只遍历 nums 的元素,直到倒数第二个元素,但您还需要检查最后一个元素。print 语句在 for 循环内缩进,因此它会在每次迭代时执行环形。 这可能不是您想要的。

使固定:

class Solution(object):
    def removeDuplicates(self, nums):
        i = 0  # Initialize the index
        for j in range(1, len(nums)):
            if nums[j] != nums[i]:
                i += 1
                nums[i] = nums[j] 
        # Return the number of unique elements in nums
        return i + 1

# Test the function
s = Solution()
nums = [1, 2, 2, 3, 3, 3, 4, 5]
print(s.removeDuplicates(nums))  # Output: 5
print(nums)  # Output: [1, 2, 3, 4, 5]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM