题目大意:找出数组中和等于特定数的两个数,并返回这两个数在数组中的序数,即它们分别是数组中的第几个数
首先看完题目,脑海里第一个想到的就是暴力求解法,用两层for循环,遍历数组中所有的两个数的和,最终得出结果,程序如下:
但是结果却是
此算法复杂度为O(n*n),采用更加高效的算法:
采用HashMap,循环遍历数组中获得每个元素,每次循环都判断当前数组索引位置的值是否存在于HashMap中,若不在,添加进去,数组元素作为key,索引值作为value;如果在的话,说明数组中有重复元素,那么这属于第二次出现,就不在添加了。接下来在HashMap中查找(target-当前数组值),若找到了这个元素,就此结束算法。该方法很好的利用了HashMap中查找元素为常数的优势,成功地将算法的时间复杂度降低为O(n)。
这里一定要注意第11行,要加上n<i的条件,避免一旦出现数组中某个数为指定数一半的时候,出现误判。