我是靠谱客的博主 外向未来,最近开发中收集的这篇文章主要介绍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        

最后

以上就是外向未来为你收集整理的python-2.找出数组中重复的数字的全部内容,希望文章能够帮你解决python-2.找出数组中重复的数字所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部