我正在尝试回答 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)
我认为如果只想计算 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