Question:
给定一个已排序的数组nums,就地删除重复项,以使每个元素仅出现一次并返回新的长度。
要求:
不要为另一个数组分配额外的空间,必须通过使用O(1)额外的内存就地修改输入数组来做到这一点。
Answer1:
def removeDuplicates(nums): if len(nums) == 0: return 0 nums.sort() ##排序,在本题中可以shenglue num_pre = nums[0] for i in range(1,len(nums)): if nums[i]-num_pre == 0: nums[i] = None else: num_pre = nums[i] while None in nums: nums.remove(None) return len(nums)
将数组排序后,两两比较,重复的元素都赋值为None,最后统一删除(remove)。
Answer2:
def removeDuplicates(nums): nums = set(nums) nums = list(nums) nums.sort() return(len(nums))
用set的性质(不含重复元素)删除重复的元素。
ps:提交答案时一直报错,但我没有排查出错误?^?而且也不觉得有错误,欢迎大家讨论和指正!
Answer3:
def removeDuplicates(nums): if len(nums) == 0: return 0 i = n = 0 for j in range(1,len(nums)): if nums[i] != nums[j]: i = j n += 1 return n+1,nums
根据提示写出来的答案,似乎只能得到元素个数,不能得到不包含重复元素的nums,这个也欢迎大家讨论和指正!
——曾经的小小少年,如今又大又圆