zoukankan      html  css  js  c++  java
  • 【剑指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
  • 相关阅读:
    sublime text3安装package control插件图文教程
    conda创建新环境
    常用的vscode插件安装
    数组合并组合
    内核软死锁
    Ubuntu分区格式化并挂载新增磁盘方法
    Linux如何列出svn一个文件夹下的所有文件
    C++ UTF-8和GBK相互转化
    Linux shell如何用正则表达式匹配分组数据
    如何对接jsoncpp?
  • 原文地址:https://www.cnblogs.com/fuj905/p/12888716.html
Copyright © 2011-2022 走看看