图片说明

第一种解法就是把每个数都放在哈希表中 然后去找对应的数

class Solution {
    public int[] twoSum(int[] nums, int target) {
        HashMap hm = new HashMap();
        for ( int i = 0; i < nums.length; i++) {
            hm.put(nums[i], i);
        }
        for(int i = 0 ; i < nums.length;i++) {
            if(hm.containsKey(target-nums[i])) {
                if(i!=hm.get(target-nums[i])){
                int arr [] = {i,hm.get(target-nums[i])};
                return arr;}
            }
        }
        return null;
    }
}

第二种解法 分开判断 不满足就放在哈希表,满足就取出

/*
 * 思路:如果没有找到就添加到哈希表中
 *      就用一次遍历就可以得到结果
 */
public class solution {
    public int[] twoSum(int[] nums, int target) {
        int[] ans = new int[2];
        HashMap<Integer, Integer> hs = new HashMap<Integer, Integer>();
        for (int i = 0; i < nums.length; i++) {
            if (!hs.containsKey(target - nums[i])) {
                hs.put(nums[i], i);
            } else if (hs.containsKey(target - nums[i])) {
                ans[0] = i;
                ans[0] = hs.get(target - nums[i]);
            }
        }
        return ans;
    }
}

优化 第二个if是不需要的

class Solution {
    HashMaphm ;
    public int[] twoSum(int[] nums, int t) {
        int [] ans = new int[2] ;
        hm = new HashMap();
        for(int i = 0 ; i < nums.length ; i++) {
            if(hm.containsKey(t-nums[i])) {
                ans[1] = i;
                ans[0] = hm.get(t-nums[i]);
            }
            hm.put(nums[i],i );
        }
        return ans;
    }
}