数组中找到两数之和为给定目标值(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<Integer, Integer> 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;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容