leetcode中的two sum问题解决方法

不得不说,水平还是太菜,最先使用的是两个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 中,这样就不会出现上面的那个问题。

原文地址:https://www.cnblogs.com/hairy/p/8950136.html