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
  • 相关阅读:
    C语言经典算法100例-039-排序队列中插入新元素
    C语言经典算法100例-037-给10个数排序
    C语言经典算法100例-036-求100之内的素数
    C语言经典算法100例-032~35
    C语言经典算法100例-031-判断星期几
    安卓 短信页面设置(线性布局)
    CSS样式表
    HTML表单
    第1部分 HTML 表格
    多线程
  • 原文地址:https://www.cnblogs.com/fuj905/p/12888716.html
Copyright © 2011-2022 走看看