LeetCode TwoSum 两数之和

2019-01-27  本文已影响0人  manyGrasses

题目

Given an array of integers, return indices of the two numbers such that they add up to a specific target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

Example:

Given nums = [2, 7, 11, 15]
target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].


暴力解法

首先想到的是对nums进行两层遍历,得到不同索引对应的数字,如果两者加和为target就返回对应索引,否则继续遍历完全部元素。

代码示例

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

该方法是比较简单的方法,但是复杂度为O(n^2),效率太低。


优化解法

考虑用空间换时间的方法进行优化:将已经遍历得到的数和对应的索引存下来,这样就省去了一次循环,时间复杂度为O(n)。因为一次要存两个元素,并且能够根据数得到该数在原数据中的索引,自然就想到了字典,key为数,value为索引。

代码示例

class Solution:
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        hashMap = {}  # key: 已遍历过的数,value: 对应的索引
        for i, x in enumerate(nums):
            residual = target - x
            if residual in hashMap:  # 在已遍历的数中如果有满足条件的就返回对应索引
                return hashMap[residual], i
            else:
                hashMap[x] = i  # 记录已经遍历过的数

--END--

上一篇下一篇

猜你喜欢

热点阅读