赞
踩
给定一个有序数组,去除重复的元素,返回新的数组长度。
备注:
如果返回的新数组长度为m,则需要保证数组的前m个元素一定包含了所有的去重后的元素,之后的元素值不作要求。
不要为另外的数组去开辟新的空间,只能修改原数组,空间复杂度为O(1)。
示例:
输入: nums = [1,1,2],
输出:2,且保证 nums 的前2位为唯一元素。
由于是有序数组,因此所有重复元素肯定都是相邻的。
因此判断一个元素是否重复,只需要观察它的前一个元素是否与它相同即可。
判断出一个重复元素后,如何处理它,有两种选择:
两种方法均只需要扫描一遍,因此时间复杂度均为 O(n)。
def removeDuplicates(nums): """ :type nums: List[int] :rtype: int 如果重复了,删除这个元素。 """ if len(nums) <= 1: return len(nums) idx = 1 while(idx < len(nums)): if nums[idx] == nums[idx - 1]: del nums[idx] else: idx += 1 return idx def removeDuplicates2(nums): """ :type nums: List[int] :rtype: int 移动重复元素。 """ if len(nums) <= 1: return len(nums) idx = 0 for num in nums: if num != nums[idx]: idx += 1 nums[idx] = num return idx + 1 if '__main__' == __name__: nums = [1,1,2] print(removeDuplicates2(nums))
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。