leetcode 热题100--11-两数之和

题目描述

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

在这里插入图片描述

求解

1. 方法:暴力求解法

思路:

内层循环从数组中取出下标为 i 的元素 num[i] ,内层循环取出 i 之后的元素 nums[j] 一一与 下标为 i
的元素进行相加操作,判断结果是否为 target 。

为什么内层循环要取i 之后的元素的元素呢?因为如果第二轮取得i 之前的数的话,其实我们
之前就已经考虑过这种情况了(即外层循环已经遍历过此时内层循环的这个数字)。

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:
			# 注意 leetcode 中要求返回的是索引位置
			return [i, j]

时间复杂度: 两次遍历O(n^2)
空间复杂度:只有两个数组,是(n)

2. 方法: 字典法

  1. 建立字典 lookup 存放第一个数字,并存放该数字的 index ;
  2. 判断 lookup 中是否存在 target - 当前数字cur , 则当前值cur 和某个lookup 中的key 值相加之和为 target ;
  3. 如果存在,则返回: target - 当前数字cur 的 index 与 当前值 cur 的 index ;
  4. 如果不存在则将当前数字 cur 为key,当前数字的 index 为值存入 lookup 。
class Solution:
    def twoSum(self, nums, target):
        dict1={}
        for i in range(0,len(nums)):
            num2=target-nums[i]
            if num2 not in dict1:
                dict1[nums[i]]=i
            else:
                return [dict1[num2],i]
	

时间复杂度: 1 次遍历O(n)
空间复杂度:只有两个数组,是(n)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值