【剑指offer】03 数组中重复的数字

题目描述


在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
 
 

分析

猛的一看还挺简单,注意时间效率和空间效率

1.直接排序,加一个for循环,找出和后一个相等的数字。时间是nlogn,空间是1

2.哈希表,遍历整个数组,当这个数字没有出现过哈希表的时候将其加入进去,如果在哈希表中则直接返回。时间是O(n),空间是O(n)

3.原地置换,遍历整个数组,将数组中的数值i放在第i个位置,若i位置已有数据,则发生重复。时间是O(n),空间是O(1)

解题

1.

class Solution:
    def findRepeatNumber(self, nums: List[int]) -> int:
        nums.sort()
        for i in range(len(nums)):
            if nums[i] == nums[i+1]:
                return nums[i]

 

2.

class Solution:
    def findRepeatNumber(self, nums: List[int]) -> int:
        dic = {}
        for i in nums:
            if i not in dic:
                dic[i] = 1
            else:
                return i

 

3.

class Solution:
    def findRepeatNumber(self, nums: List[int]) -> int:
        for i in range(len(nums)):
            while nums[i] != i:
                if nums[nums[i]] == nums[i]:
                    return nums[i]
                temp = nums[i]
                nums[i] = nums[temp]
                nums[temp] = temp

 

posted @ 2020-05-14 15:03  Flora1014444  阅读(112)  评论(0编辑  收藏  举报