数组中找到两数之和为给定目标值(LeetCode--1.两数之和)

题目描述

整数数组中找出一组和为目标值的两个整数(不能重复利用这个数组中同样的元素),并返回他们的数组下标。

示例:
输入:[2, 7, 11, 15] 和 9
原因:nums[0] + nums[1] = 2 + 7 = 9
输出:[0, 1]

解析

考察重点:应用HashMap存储数据并快速检索,空间换取时间
实现方法:

很明显暴力法可以两次循环遍历,对数组中的每一个整数都去查找是否有匹配的结果,此时实际复杂度为O(n^2)。在这里我们应用HashMap存储已经遍历过的整数。当读取一个整数时去HashMap中查找是否有匹配的结果,如果存在返回结果,如果不存在将当前整数存入HashMap中,直到遍历完数组中全部整数为止。每次读取整数都会检查它之前读入的整数是否有匹配的结果,这样当遍历了全部数组整数之后,就会检查了所有可能的结果。使用HashMap存储记录是一种典型的用空间换取时间的做法,时间复杂度为O(n),空间复杂度为O(n)。

代码
public int[] twoSum(int[] nums, int target) {
    Map map = new HashMap<>();
    for(int i = 0; i < nums.length; ++i){
        Integer j;
        if((j = map.get(target - nums[i])) != null){//如果存在匹配结果,返回
            return new int[]{i,j};
        }
        map.put(nums[i], i);//放入HashMap中存储,继续遍历数组
    }
    return null;
}

你可能感兴趣的:(数组中找到两数之和为给定目标值(LeetCode--1.两数之和))