美文网首页
力扣(LeetCode)之两数之和

力扣(LeetCode)之两数之和

作者: 小黄不头秃 | 来源:发表于2023-08-29 14:43 被阅读0次
题目:

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

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

示例:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
方法1:暴力搜索

这是我们最简单能够想到的方法,直接使用简单的for循环就能够实现。这里我们用python代码简单实现一下:

def fun(nums, target):
    for i, num_1 in enumerate(nums):
        for j, num_2 in enumerate(nums[i:]):
            if num_1 + num_2 == target:
                return[i, j+i]
    return 0 
方法2:使用哈希表

第一种方法实现较为简单,空间复杂度为O(1),但是其时间复杂度较高,为O(n^2)
这里我们想一下是否可以利用空间来换取时间呢?
我们可以使用hashmap来对前面的数据进行存储,就可以做到遍历一次就完成任务。
我们定义一个字典,字典的键用来存储数字,值存储对应的坐标;遍历数组,并查找数组中的值,与字典中的键相加是否等于目标数字,其具体代码如下:

def fun2(nums, target):
   m = {}
   for i, num_1 in enumerate(nums):
       if target-num_1 in m.keys():
           return[m[target-num_1], i]
       else:
           m[num_1] = i
   return 0 

相关文章

网友评论

      本文标题:力扣(LeetCode)之两数之和

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