不得不说,水平还是太菜,最先使用的是两个for循环,直接暴力解题,虽然得到了结果,但是网上已经有人说了暴力解题过不了,所以只能寻求另外的解决方法。偶然看到网友提到可以用hashmap来解决,所以就上网查找hashmap的使用方法,因为之前没有接触过。。。。终于将这道题给攻破了,哈哈哈,好开心。
import java.util.HashMap; public class TwoSum { public static int[] twoSum(int[] nums,int target) { HashMap<Integer,Integer> m = new HashMap<Integer,Integer>();//创建一个hashmap对象 int []res = new int[2];//创建存放数组下标的数组 for(int i = 0; i < nums.length;++i) {//循环 if(m.containsKey(target - nums[i])) {//判断数组中是否存在和target-nums[i]的值,存在则 res[0] = i; res[1] = m.get(target - nums[i]); break; } m.put(nums[i], i);//将数组中的值和下标添加到hashmap中 } return res; } public static void main(String[] args) { int[] s = {2,5,8,9}; int[] re = twoSum(s,7); System.out.println("re1=" + re[0] + ",re2=" + re[1]);//输出下标 } }
写出来之前,本人是将
m.put(nums[i], i);//将数组中的值和下标添加到hashmap中
这句放在循环之前,然后用另一个循环将sums的值一个个先放进去,虽然测试的时候没有 出现问题,但是没有考虑到数组中同一个数字之和的情况,所以提交的时候出现了解答错误的情况,所以只能将代码放在for循环里面,进来一个先看是不是和target-sums[i]相等,再将这个数和下标放到hashmap 中,这样就不会出现上面的那个问题。