本文共 1703 字,大约阅读时间需要 5 分钟。
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
可以这样去考虑,借助一个容器,先将数组中的第一个数字放到这个容器中,然后我们循环遍历数组中剩下的每一个数字,然后我们利用判断target和遍历的这个数字的差值是不是存在于我们容器中,或者说是不是和存的这个数相等,如果是就将这个数字返回就行。
第一步:创建一个map集合,集合是通过键值对的形式存储,既能遍历索引,也能通过索引找到其对应的值
第二步:先将nums集合中的第一个数存进map集合
第三步:循环nums中剩下的值,让每一个值都与target做差值,得到相应的差
第四步:map.containsKey(key)能够判断该key是否存在于map中,存在则返回true。这里如果存在则获取这个值的索引和值
第五步:在第一步存入map的第一个值与所有的值做完差之后,现在要更新map集合中存入的这个值再与nums中剩下的所有值进行判断
import java.util.HashMap;import java.util.Map;class Solution { public int[] twoSum(int[] nums, int target) { int len = nums.length; //创建map集合对象 HashMapMap = new HashMap (); //添加nums数组中的第一个元素和索引到Map集合中 Map.put(nums[0],0); for(int i=1; i
第5行:将nums的数组大小值赋给整型变量len。
第7行:创建一个map集合对象,用来存放键值对,其中key不能重复,没有顺序,相当于一个set集合。
第9行:Object.put(Object key, Object value):添加一个键值对,如果集合中的key重复,则覆盖原来的键值对。注意这里在put时是将值作为key,然后这里的value是数组的索引。
第10行:循环整个数组。
第11行:这一步逻辑很重要,以示例1为例吧,比如我的目标值是9,这里就假如i=1,nums[i]获取的是nums集合里面的值为2,那么target-nums[i]的值为7,赋给整型变量a。
第12行:这里if判断里面有一个boolean.containsKey(Object key)方法,这个方法返回Map集合中包含指定的键名,如果有返回true,否则放回false。括号中的参数放回的是要查询的Map集合的键名对象。
第13行:这里相当于定义了一个集合,集合里存放两个元素,第一个元素是当前for循环到的元素,第二个元素利用Object.get()方法返回的是key对应的value值,在这里就是相当于11行a=7的下标。
第17行:将每一次循环的数组元素,都以(值,下标)的方式存入到map集合中,利用map集合的特性,第9行说过,在map集合中如果key重复,则覆盖原来的值,这里就是覆盖原来第9行的Map.put(nums[0],0)的值。
第20,21行:这里抛出异常或者返回null,原因是想上面你的方法返回一个不合法或不正确的参数,或者返回一个数组也可以。相当于如果出现上面方法没有描述到的情况在这里不解决,直接抛给方法或者放回null。
这里返回回一个不合法或不正确的参数,或者返回一个数组也可以。相当于如果出现上面方法没有描述到的情况在这里不解决,直接抛给方法或者放回null。
新手小白刚开始刷题,所以注释做的比较详细,主要方便自己理解,解题没考虑相关的时间和空间复杂度,有什么不足之处希望多多体谅,虚心求教。
转载地址:http://nogki.baihongyu.com/