解题思路
空间复杂度要求不能新建哈希表,又表示数据范围和数组大小范围一样。
采用原地哈希法。
即位置 i 上元素为 j ,如果元素 i 出现过,那么把位置 i 上的元素 j 变为相反数,这样类似于一个bool哈希表。
def containsDuplicate(nums): N = len(nums) for i in range(N): index = abs(nums[i]) - 1 # 因为值域是1~N,所以要减1 # 如果当前索引处的值已经是负数,说明之前已经被标记过,即该值重复 if nums[index] < 0: return True, abs(nums[i]) # 返回True和重复的元素值 # 否则,将该索引处的值变为负数,以标记该值已经出现过 nums[index] = -nums[index] return False, None # 如果没有发现重复元素,返回False和None
有⼀个容量为N的数组,每个数的取值范围是1~N,找出重复元素,要求空间复杂度O(1)
最新推荐文章于 2024-08-15 10:25:23 发布