python-2.找出数组中重复的数字

题目描述:

  • 在一个长度为n的数组里的所有数字都在0~n-1的范围内,数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数字中任意一个重复的数字。例如,如果输入长度为7的数字{2, 3, 1, 0, 2, 5, 3},那么对应的输出是重复的数字2或者3.

解题思路:

  • 直接对数组排序然后顺序遍历:时间复杂度 O(nlogn) O ( n l o g n )
  • 顺序扫描数组,利用哈希表记录是否出现过: 时间复杂度 O(n) O ( n ) 空间复杂度 O(n) O ( n )
  • 顺序扫描数组,在数组对应位置i上看数字是否为i:
    • 若是,则继续扫描下一个
    • 若不是,记数字为m,比较i与m位置的数字:
    • 若相等,则找到重复数字
    • 若不相等,则交换i与m,m位置上数字已经确定,继续以上操作
      时间复杂度: O(n) O ( n ) 空间复杂度 O(1) O ( 1 )
class Solution:
    def _init_(self):
        pass
    # 防止无效输入
    def valid_check(self, a):
        if len(a) == 0:
            return False
        for i in range(len(a)):
            if a[i] < 0 or a[i] > len(a) - 1:
                return False
        return True
    def Method_1(self, a):
        if valid_check(a):
            a = sorted(a)
            for i in range(len(a) - 1):
                if a[i] == a[i + 1]:
                    return a[i]
        else: return False
    def Method_2(self, a):
        if valid_check(a):
            num_array = np.zeros(len(a))
            for i in range(len(a)):
                if num_array[a[i]] == 0:
                    num_array[a[i]] += 1
                else: 
                    return a[i]
        else: return False

    def Method_3(self, a):
        if valid_check(a):
            for i in range(len(a)):
                while a[i] != i:
                    if a[a[i]] == a[i]:
                        return a[i]
                    else:
                        a[a[i]], a[i] = a[i], a[a[i]]
        else: return False        
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值