Leetcode: 两数之和(python)

Leetcode: 两数之和(python)

  • 问题
  • 示例
  • 解法1:暴力法
  • 解法2:切片法
  • 解法3:哈系表

问题

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那 两个整数,并返回它们的数组下标。

示例

输入:nums = [1,4,7,11], target = 8
输出:[0,2]
解释:因为 nums[0] + nums[2] == 8 ,返回 [0, 2]

解法1:暴力法

遍历每一个元素进行判断,时间复杂度:O(n^2),空间复杂度:O(1)

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(len(nums)):
                if (j>i)&(nums[i]+nums[j] == target):
                    result = [i,j]
                    return result

解法2:切片法

将原列表切成两片进行查找

class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        n=0
        for i in range(0,len(nums)-1):
            n+=1
            if (target - nums[i]) in nums[i+1:]:
                return [i,nums[i+1:].index(target - nums[i])+n]

解法3:哈系表

通过以空间换取速度的方式,我们可以将查找时间从 O (n) 降低到 O (1)。哈希表正是为此目的而构建的,它支持以近似恒定的时间进行快速查找。

在第一次迭代中,我们将每个元素的值和它的索引添加到表中。
在第二次迭代中,我们将检查每个元素所对应的目标元素(target - nums [i])是否存在于表中。
时间复杂度:O (n),空间复杂度:O (n)

class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        hashmap={}
        for i,n in enumerate(nums):
            if target - n in hashmap:
                return [hashmap.get(target - n),i]
            hashmap[n] = i

你可能感兴趣的:(Leetcode,leetcode,python,算法)