天天刷leetcode(1) ---- Two Sum

问题描述

Given an array of integers nums and an integer target, return indices
of the two numbers such that they add up to target.

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

You can return the answer in any order.

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

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

思路

题目要求我们在给定的数组中找到两个整数,这两个整数的和为目标值。首先可以想到的方法便是双循环的穷举法,代码如下:
在这里插入图片描述两次循环进行暴力求解,得到题目要求。结果提交后成功运行,但是运行时间为748ms,该方法复杂度为O(n^2),所以思考如何进行改进。

可以想到首先将数组索引建立哈希表,然后用目标值减去数组中的值,判断计算结果在哈希表中是否存在即可。该算法的复杂度降为O(n)。

在这里插入图片描述代码中第10行的判断条件需要注意,第二个判断条件保证计算得到的left和nums[i]是不同的值。该方法提交后,运行时间为24ms,速度有明显提高。

两种方法运行速度对比

14分钟前的方法为穷举法,几秒前的方法为哈希表法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值