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;
    }
}
相关推荐
Syntech_Wuz6 分钟前
从 C 到 C++:容器适配器 std::stack 与 std::queue 详解
数据结构·c++·容器··队列
ghie909017 分钟前
基于MATLAB的遗传算法优化支持向量机实现
算法·支持向量机·matlab
朝新_1 小时前
【优选算法】第一弹——双指针(上)
算法
艾莉丝努力练剑1 小时前
【C++STL :stack && queue (一) 】STL:stack与queue全解析|深入使用(附高频算法题详解)
linux·开发语言·数据结构·c++·算法
CoovallyAIHub2 小时前
ICLR 2026 惊现 SAM 3,匿名提交,实现“概念分割”,CV领域再迎颠覆性突破?
深度学习·算法·计算机视觉
IT古董2 小时前
【第五章:计算机视觉-计算机视觉在工业制造领域中的应用】1.工业缺陷分割-(2)BiseNet系列算法详解
算法·计算机视觉·制造
电鱼智能的电小鱼2 小时前
服装制造企业痛点解决方案:EFISH-SBC-RK3588 预测性维护方案
网络·人工智能·嵌入式硬件·算法·制造
yan8626592462 小时前
于 C++ 的虚函数多态 和 模板方法模式 的结合
java·开发语言·算法
小此方2 小时前
C语言自定义变量类型结构体理论:从初见到精通(下)
c语言·数据结构·算法
im_AMBER2 小时前
数据结构 05 栈和队列
数据结构·笔记·学习