两数之和

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。

你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

解答:一遍哈希表

在进行迭代并将元素插入到表中的同时,我们还会回过头来检查表中是否已经存在当前元素所对应的目标元素。如果它存在,那我们已经找到了对应解,并立即将其返回。

复杂度分析:

时间复杂度:O(n), 我们只遍历了包含有 n 个元素的列表一次。在表中进行的每次查找只花费 O(1) 的时间。

空间复杂度:O(n), 所需的额外空间取决于哈希表中存储的元素数量,该表最多需要存储 n个元素。

代码

 public int[] twoSum(int[] nums, int target) {
        int length = nums.length;
        if(length < 1){
            return null;
        }
        Map<Integer, Integer> numMap = new HashMap<>();
        int[] results = new int[2];
    
        for (int i = 0; i < length; i++) {
            int current = nums[i];
            int key = target - current;
            Integer otherIndex = numMap.get(key);
            if (otherIndex != null) {
                results[0] = otherIndex;
                results[1] = i;
                break;
            }
            numMap.put(current, i);
        }
        return results;
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.两数之和 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样...
    Gunther17阅读 1,062评论 2 6
  • 题目描述 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元...
    哦累哇滚筒洗衣机阅读 180评论 0 0
  • 老付不老,之所以叫老付,是因为从小学起大家都就叫他老付。 小学二年级时有小伙伴在窗外大声呼唤老付老付,没等...
    菩提子_8dc6阅读 482评论 0 0
  • “hope is a powerful thing”
    灼见阅读 144评论 0 0
  • 5.17道琼斯与FB走势 就想每天把道琼斯的走势集合一下,昨天在路上,现在仍然飞机晚点中,停很多天了,忘了是多么容...
    与姝会友阅读 58评论 0 0