面试题3. 数组中重复的数字

思路一:构建一个空数组,将不重复的数字存入,遇到重复的输出,返回True即可

思路2:建立一个全为0的数组,长度等输入数组。将输入数组的数值对应到全0数组的索引中,若对应上加1,保证新数组每个元素<=1即可,也就是>1,证明重复

举例:A{1,2,3,3,4,5},刚开始B是{0,0,0,0,0,0},开始扫描A。

A[0] = 1  {0,1,0,0,0,0}

A[1] = 2 {0,1,1,0,0,0}

A[2] = 3 {0,1,1,1,0,0}

A[3] = 3 {0,1,1,2,0,0},到这一步,就已经找到了重复数字。

A[4] = 4 {0,1,1,2,1,0}

A[5] = 5 {0,1,1,2,1,1}

时间复杂度O(n),空间复杂度O(n),算法优点是简单快速,比用set更轻量更快,不打乱原数组顺序。

 

 

 

# -*- coding:utf-8 -*-
class Solution:
    # 这里要特别注意~找到任意重复的一个值并赋值到duplication[0]
    # 函数返回True/False
    def duplicate(self, numbers, duplication):
        # write code here
        # 先做异常判断
        if not numbers:
            return False
         
        length = len(numbers)
        #创建全0的数组
        assist = [0]*length
        for i in numbers:
            if assist[i] == 0:
                assist[i] += 1
            else:
                duplication[0] = i
                return True
        return False

  

posted @ 2019-07-15 16:30  lililili——  阅读(257)  评论(0)    收藏  举报