问题描述
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,速度有明显提高。
两种方法运行速度对比