2018-11-26 两数之和

题目:

1. 两数之和

解法:

解法一: 直接暴力法

public int[] twoSum(int[] nums, int target) {
    for(int i = 0; i < nums.length - 1; i++){
        for(int j = i+1; j< nums.length; j++){
            if(nums[i] + nums[j] == target){
                return new int[]{i, j};
            }
        }
    }
    return null;
}

解法二: 遍历一次数组即可. 新建一个HashMap, 存储的key-v结构是(数组的值 ==> 数组的下标) 然后每次用 target 减去 遍历的数组的元素, 判断HashMap中是否包含该key, 如果包含则返回下标, 结束.

public int[] twoSum(int[] nums, int target) {
    if((nums == null) || (nums.length < 2)){
        return null;
    }
    Map map = new HashMap<>();
    map.put(nums[0], 0);
    for(int i=1; i< nums.length; i++){
        int tmp = target - nums[i];
        if(map.containsKey(tmp)){
            return new int[]{map.get(tmp), i};
        }else{
            map.put(nums[i], i);
        }
    }
    return null;
}

你可能感兴趣的:(2018-11-26 两数之和)