LeetCode刷题之——两数之和(Python解答)

LeetCode刷题之——两数之和(Python解答)_第1张图片

  写在开头的话:印象中读研之后就好久没有更新博客,本科用来记录代码练习的方式不能荒废,从今天开始由易到难刷LeetCode上的算法题,主要使用Python3来解决,以发博客的形式记录,也作为学习的笔记与心得,希望自己能够坚持下去,也以此方式让学习看得见!也欢迎大家交流与讨论!

解答:

(1)本人采取的暴力解答法,即采取两个循环,遍历整个LIST,代码如下:

class Solution(object):

    def twoSum(self, nums, target):

        """

        :type nums: List[int]

        :type target: int

        :rtype: List[int]

        """

        for i in range(len(nums)):

            for j in range(i+1, len(nums)):

                if nums[i] + nums[j] == target:

                    result = [i , j]

                    return result

提交结果如下:

LeetCode刷题之——两数之和(Python解答)_第2张图片

采用暴力方法虽然提交通过,但是时间复杂度较高,所以在python语言解决问题的基础上寻求更好的解决办法。

(2)由于使用python这一集成度较高的高及编程语言,故采用其特有的字典形式来模拟哈查询的国车过,达到降低复杂度的效果,代码如下:

class Solution(object):

    def twoSum(self, nums, target):

        """

        :type nums: List[int]

        :type target: int

        :rtype: List[int]

        """

        hashmap = {}

        for index, value in enumerate(nums):

            hashmap[value] = index

        for index, value in enumerate(nums):

            j = hashmap.get(target - value)

            if j is not None and index!=j:

                return [index, j]

运行结果如下:

LeetCode刷题之——两数之和(Python解答)_第3张图片

(3)对第二种方法提出改进,只寻找当前value值与target之差的值是否在当前value值之前即可,代码如下:

class Solution(object):

    def twoSum(self, nums, target):

        """

        :type nums: List[int]

        :type target: int

        :rtype: List[int]

        """

        hashmap = {}

        for index, value in enumerate(nums):

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

                return [index, hashmap.get(target - value)]

            hashmap[value] = index

提交结果如下:

LeetCode刷题之——两数之和(Python解答)_第4张图片

可以看出,用字典模拟哈希表的方式来进行寻找两数之和更加地快速,运行效率更高。

 

 

 

 

 

 

 

 

你可能感兴趣的:(LeetCode,编程练习)