LeetCode1.两数之和(超简单讲解)

1.两数之和

题目

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。

你可以按任意顺序返回答案。

示例

示例1

java 复制代码
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 

示例2

java 复制代码
输入:nums = [3,2,4], target = 6
输出:[1,2]

示例3

java 复制代码
输入:nums = [3,3], target = 6
输出:[0,1]

解题思路

哈希表

以第一个例子nums=[2,7,11,15],target = 9 为例,对数组中的每个元素而言,我们可以找和这个元素相加为target的元素(暂且称为互补元素),如果这个互补元素存在,那么就输出它们的下标:

  • 2:存在7,使得2+7=9,它们符合条件
  • 7:存在2,使得7+2=9,它们符合条件
  • 11,不存在-2,使得11+(-2)=9,不符合条件
  • 15,不存在-6,使得11+(-6)=9,不符合条件
    可以看到2+7和7+2这两种情况其实重复输出了,为了避免重复输出,那么我们可以遍历数组,并逐个把元素放入HashMap,在放入的时候,就判断对于当前元素,现在HashMap中是否有互补元素,如果有就直接输出他们的下标,不将互补元素放入哈希表中。否则,如果对于当前元素,现在HashMap中没有互补元素,那么我们就将当前元素放入哈希表中。
    同时,HashMap也可以保证,值相同的元素只会放入一次,如果nums=[2,2,7,11,15],target = 9 ,那么2也只会被放入一次。

实现设计

复制代码
可以用HashMap存放<元素值,元素下标>键值对,如果符合条件的元素存在,就将他们的下标输出。否则就将这个元素和它的小标存入哈希表。

详细代码

java 复制代码
class Solution {
    public int[] twoSum(int[] nums, int target) {
    	//map的键存在元素值,map的值存在元素的下标
        HashMap<Integer,Integer> map = new HashMap<>();
        //res存放符合条件的下标对
        int[] res=new int[2];
        for(int i=0;i<nums.length;i++){
        	//tmp中暂存当前元素的互补元素
            int tmp = target-nums[i];
            //如果现在哈希表中存在当前元素的互补元素,把它们的下标放入res
            if(map.containsKey(tmp)){
                res[0]=i;
                res[1]=map.get(tmp);
            }else{
                map.put(nums[i],i);
            }
        }
        return res;
    }
}
相关推荐
小庞在加油7 分钟前
《dlib库中的聚类》算法详解:从原理到实践
c++·算法·机器学习·数据挖掘·聚类
ComputerInBook11 分钟前
C++ 标准模板库算法之 transform 用法
开发语言·c++·算法·transform算法
hn小菜鸡6 小时前
LeetCode 377.组合总和IV
数据结构·算法·leetcode
Deepoch7 小时前
Deepoc 大模型:无人机行业的智能变革引擎
人工智能·科技·算法·ai·动态规划·无人机
heimeiyingwang9 天前
【深度学习加速探秘】Winograd 卷积算法:让计算效率 “飞” 起来
人工智能·深度学习·算法
时空自由民.9 天前
C++ 不同线程之间传值
开发语言·c++·算法
ai小鬼头9 天前
AIStarter开发者熊哥分享|低成本部署AI项目的实战经验
后端·算法·架构
小白菜3336669 天前
DAY 37 早停策略和模型权重的保存
人工智能·深度学习·算法
zeroporn9 天前
以玄幻小说方式打开深度学习词嵌入算法!! 使用Skip-gram来完成 Word2Vec 词嵌入(Embedding)
人工智能·深度学习·算法·自然语言处理·embedding·word2vec·skip-gram
亮亮爱刷题9 天前
飞往大厂梦之算法提升-7
数据结构·算法·leetcode·动态规划