美文网首页
LeetCode TwoSum 两数之和

LeetCode TwoSum 两数之和

作者: manyGrasses | 来源:发表于2019-01-27 15:38 被阅读0次

    题目

    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--

    相关文章

      网友评论

          本文标题:LeetCode TwoSum 两数之和

          本文链接:https://www.haomeiwen.com/subject/njagjqtx.html