1. 两数之和

题目地址()

https://leetcode.cn/problems/two-sum/submissions/

题目描述

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。

前置知识

  • 哈希表

思路

关键点

  • 求和转换为求差
  • 借助Map结构将数组中每个元素及其索引相互对应
  • 以空间换时间,将查找时间从O(N)降低到O(1)

代码

  • 语言支持:Java

Java Code:


class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] ans = new int[2];
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length; ++i) {
            map.put(nums[i], i);
        }
        for (int i = 0; i < nums.length; ++i) {
           // 这里注意后面第二条件,一个数只能用一次
            if (map.get(target - nums[i]) != null && map.get(target - nums[i]) != i) {
                ans[0] = i;
                ans[1] = map.get(target - nums[i]);
                return ans;
            }
        }
        return null;
    }
}

更简洁的写法:

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

Go Code:

func twoSum(nums []int, target int) []int {
    hashMap := map[int]int{}
    for i, v := range nums {
        if j, ok := hashMap[target - v]; ok {
            return []int{j, i}
        }
        hashMap[v] = i
    }
    return nil
}

复杂度分析

令 n 为数组长度。

  • 时间复杂度:O(1)
  • 空间复杂度:O(n)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值 target 的那两个整数,并...
    ufogxl阅读 161评论 0 0
  • 为了更好的明天,坚持刷 LeetCode[https://leetcode-cn.com/u/k8scat/]! ...
    K8sCat阅读 195评论 0 0
  • 题目 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target ...
    另一个毕加索阅读 102评论 0 1
  • 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 ...
    年少为云阅读 180评论 0 0
  • 题目链接 https://leetcode-cn.com/problems/two-sum/ 题目描述 给定一个整...
    DeppWang阅读 278评论 0 0