# LeetCode 100题题解(JAVA) 两数之和
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:简单记录一下答案和思路。
提示:以下是本篇文章正文内容,下面案例可供参考
简单记录一下答案和思路。
一、两数之和
题目描述:
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
你可以按任意顺序返回答案。
示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:
输入:nums = [3,2,4], target = 6
输出:[1,2]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、解题思路
1.使用HashMap
1.声明一个HashMap接收字符串数值,key存字符值,value存下标.
2.对数组进行for循环,判断Map中是否包含target-nums[i]
3.第一次,Map为空,肯定不包含,将数值num[0],存入
4.如果包含,说明Map中有一个数(之前存入Map中数组中的值)与当前nums[i]之和为target,返回当前的数组下标i和对应的map中的value.
把数组的每一个值存入HashMap中.
5.如果没有答案,抛出异常
2.代码如下
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer> map = new HashMap<>();
for(int i=0;i<nums.length;i++){
if(map.containsKey(target - nums[i])){
return new int[] {map.get(target - nums[i]),i};
}else{
map.put(nums[i],i);
}
}
throw new IllegalArgumentException("No two sum solution");
}
}
总结
提示:这里对文章进行总结:
关键是对HashMap的使用,搞清楚key和value存什么,以及将两数和的条件翻译成代码:
map.containsKey(target - nums[i])
其实也很简单,将数组和HashMap联合起来使用就行,我觉得编程有一个思想很关键,就是将旧的值的,或者说遍历到的值,存入一个容器(变量,便于理解但说法不准确),以后要用到的时候可以方便调用. 比如讲num[0]存入HashMap中,之后就的循环也会用到该值进行判断.