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;
    }
}
相关推荐
小雅痞5 分钟前
[Java][Leetcode simple] 1. 两数之和
java·算法·leetcode
somi79 分钟前
ARM-驱动-09-LCD FrameBuffer
arm开发·驱动开发·算法·自用
乐迪信息10 分钟前
乐迪信息:智慧港口AI防爆摄像机实现船舶违规靠岸自动抓拍
大数据·人工智能·算法·安全·目标跟踪
winxp-pic13 分钟前
图片校正软件 操作说明及算法介绍
算法
wayz1119 分钟前
Day 6 编程实战:决策树与过拟合分析
算法·决策树·机器学习
ฅ ฅBonnie27 分钟前
vLLM 推理后端简介
人工智能·python·算法
贾斯汀玛尔斯28 分钟前
每天学一个算法--堆排序(Heap Sort)
数据结构·算法
programhelp_30 分钟前
ZipRecruiter CodeSignal OA 2026|最新真题分享 + 速通攻略
数据结构·经验分享·算法·面试
绿豆人38 分钟前
go语言的Reflect包
java·开发语言·数据结构
liuyao_xianhui1 小时前
map和set_C++
java·开发语言·数据结构·c++·算法·宽度优先