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
  • 相关阅读:
    Comparable VS Comparator
    Javascript中this关键字详解
    Runtime、System、Object
    JS IDE
    异常处理
    Throwable vs Exception
    8.4 Java 命名规范
    关键字、标识符、注释、变量
    Docker —— 从入门到实践
    RTC教程
  • 原文地址:https://www.cnblogs.com/fuj905/p/12888716.html
Copyright © 2011-2022 走看看