两数之和问题

问题描述:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum
 
思路1: 暴力解法,两个for循环遍历数组,依次相加检查是否等于target,存在则返回对应数组下标,否则返回(-1,-1)
 
 
思路2:HashMap解法(参考了大神的解法
使用HashMap以(值,下标)的形式依次存储数组中的元素,存储指针指向的元素之前先判断已存储在HashMap的元素中是否存在与其之和为target的,若有则返回两者下标,否则继续遍历;若将数组都存入HashMap后无解,返回(-1,-1)
 
代码思路:
构建HashMap(key为nums中的值,value为nums的值对应下标),使用containsKey判断HashMap中是否存在与指针i所指向的数nums[i]之和为target的key值,若存在则返回该key所对应的value和i,否则将指针i对应的值和下标存入HashMap中,进行下一轮搜索。若最后查询无解,返回(-1,-1)
 

 

 第二种解法在效率上远超第一种,内存消耗相差无几,建议使用第二种。

以上,希望对各位有所帮助。

200909 Rewivy

posted @ 2020-09-09 19:22  Rewivy  阅读(135)  评论(0编辑  收藏  举报