zoukankan      html  css  js  c++  java
  • 查找数组中重复的数字-python版

    题目一:找出数组中重复的数字

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

    解法一:可以先将数据进行排序,然后就能很快找到重复的,但是该种方法的时间复杂度是O(nlogn)

    解法二:也可以利用哈希表,每遍历一个数字,都能通过O(1)找到是否存在该数字,但是该方法的空间复杂度为O(n)

    解法三:遍历数组,将第i个位置的值与第i+1到结尾的每一个值做比较,如果找到,则return,两层for循环(具体见代码)

    def get_repeat(arr):
        if len(arr) <= 1:
            return False
        for i, v in enumerate(arr):
            for j in arr[i + 1:]:
                if v == j:
                    temp = j
                    print temp
                    return True
            return False
    
    
    if __name__ == '__main__':
        arr = [2, 3, 1, 0, 2, 5, 3]
        get_repeat(arr)

    解法四:重排这个数组,如果这个数组中没有重复的数字,则这个数组是i就在第i个位置上,如果有重复,则重复的数字的位置上就会存在多个值

    具体分析:

      遍历数组中每一个数字:

        判断第i个数字(m)是否等于i:

          如果相等,则遍历下一个数字

          如果不等,则将m和第m个数字比较,如果相等,则找到了重复值

            如果不等,则第i个数字和第m个数字调换位置,把m放在该放的位置上

    第一层一个for循环,终止条件是,找到了重复的数字,即m和第m个数字相等

      内部有个while循环,调换位置,终止条件是第i个数字等于i

    代码:

    def get_repeat(arr):
        if len(arr) <= 1:
            return False
        # 遍历整个数组
        for i, v in enumerate(arr):
            # 如果i不等于第i个值
            while v != i:
                if v == arr[v]:
                    print v
                    return True
                temp = arr[v]
                arr[v] = arr[i]
                arr[i] = temp
        return False
    
    
    if __name__ == '__main__':
        arr = [2, 3, 1, 0, 2, 5, 3]
        get_repeat(arr)

    题目二:不修改数组找出重复的数字

    题目一中的解法三可以不需要修改数组就能找到重复的数字

  • 相关阅读:
    剑指 Offer 55. 二叉树的深度
    剑指 Offer 11. 旋转数组的最小数字
    [COCOS2DX-LUA]0-006.cocos2dx中关于拖动屏幕物件,同时点击home键,返回后页面变黑的问题。
    Kafka 入门(三)--为什么 Kafka 依赖 ZooKeeper?
    Kafka 入门(二)--数据日志、副本机制和消费策略
    Kafka 入门(一)--安装配置和 kafka-python 调用
    网络通信基础笔记
    项目经理的必要性
    Jenkins用户管理
    JVM笔记二双亲委派机制
  • 原文地址:https://www.cnblogs.com/lili-work/p/14401864.html
Copyright © 2011-2022 走看看