• 1.两数之和(Python)


    暴力破解
    用两层循环进行解题,不过提交结果后提示 “超出时间限制”,这里就不做讲解。

    用 Python 中 list 的相关函数求解
    方法一:
    解题关键主要是想找到 num2 = target - num1,是否也在 list 中,那么就需要运用以下两个方法:

    num2 in nums,返回 True 说明有戏
    nums.index(num2),查找 num2 的索引
    Python

    def twoSum(nums, target):

        lens = len(nums)

        j=-1

        for i in range(lens):

            if (target - nums[i]) in nums:

                if (nums.count(target - nums[i]) == 1)&(target - nums[i] == nums[i]):#如果num2=num1,且nums中只出现了一次,说明找到是num1本身。

                    continue

                else:

                    j = nums.index(target - nums[i],i+1) #index(x,i+1)是从num1后的序列后找num2               

                    break

        if j>0:

            return [i,j]

        else:

            return []


    执行通过,不过耗时较长,共 1636ms。

    方法二:
    解题思路是在方法一的基础上,优化解法。想着,num2 的查找并不需要每次从 nums 查找一遍,只需要从 num1 位置之前或之后查找即可。但为了方便 index 这里选择从 num1 位置之前查找:

    Python

    def twoSum(nums, target):

        lens = len(nums)

        j=-1

        for i in range(1,lens):

            temp = nums[:i]

            if (target - nums[i]) in temp:

                j = temp.index(target - nums[i])

                break

        if j>=0:

            return [j,i]

    执行通过,耗时缩短一半多,共 652ms。

    用字典模拟哈希求解
    方法三:
    参考了大神们的解法,通过哈希来求解,这里通过字典来模拟哈希查询的过程。
    个人理解这种办法相较于方法一其实就是字典记录了 num1 和 num2 的值和位置,而省了再查找 num2 索引的步骤。

    Python

    def twoSum(nums, target):

        hashmap={}

        for ind,num in enumerate(nums):

            hashmap[num] = ind

        for i,num in enumerate(nums):

            j = hashmap.get(target - num)

            if j is not None and i!=j:

                return [i,j]


    通过字典的方法,查找效率快很多,执行速度大幅缩短,共 88ms。

    方法四:
    类似方法二,不需要 mun2 不需要在整个 dict 中去查找。可以在 num1 之前的 dict 中查找,因此就只需要一次循环可解决。

    Python

    def twoSum(nums, target):

        hashmap={}

        for i,num in enumerate(nums):

            if hashmap.get(target - num) is not None:

                return [i,hashmap.get(target - num)]

            hashmap[num] = i #这句不能放在if语句之前,解决list中有重复值或target-num=num的情况


    hashmap[num] = i #这句不能放在if语句之前,解决list中有重复值或target-num=num的情况
    不过方法四相较于方法三的运行速度没有像方法二相较于方法一的速度提升。运行速度在 70ms 多。

  • 相关阅读:
    TcIC(Teamcenter集成CatiaV5)的安装
    centos7上使用bind解析子域名
    Windows10 家庭版(1903/1909)中用RDPWrapper-v1.6.2和autoupdate补丁开启远程桌面功能
    修改SQL Server Express 2019 sa用户密码的方法
    微星B450主板安装64G内存的一个小招数
    缩小xfs文件系统的CentOS/RedHat虚拟机硬盘的迂回方法
    MQL命令的打开方式
    台电TBook二合一本全新安装Windows10
    django_auth_ldap
    开始认真学计算机网络----computer network学习笔记(一)
  • 原文地址:https://www.cnblogs.com/zhulimin/p/13736123.html
Copyright © 2020-2023  润新知