Leetcode 1. 两数之和(DAY 01)---- Leetcode Hot 100刷题总结

题目链接:1. 两数之和 - 力扣(LeetCode)

解题思路

问题描述

给定一个整数数组 nums 和一个整数目标值 target,我们需要在这个数组中找到两个整数,它们的和等于 target,并返回这两个整数在数组中的下标。

解题思路

解决这个问题的一种有效方法是使用哈希表(也称为字典或映射)。哈希表允许我们快速检查一个元素是否已经在数组中出现过,并且可以存储元素与其下标之间的映射。

以下是详细的步骤:

  1. 创建哈希表:首先,创建一个空的哈希表,用于存储数组中每个元素的值及其对应的下标。

  2. 遍历数组:然后,遍历数组 nums 中的每个元素。

  3. 计算补数:对于每个元素 nums[i],计算它的补数,即 target - nums[i]。这个补数是我们要找的另一个数,使得它与当前元素的和等于 target

  4. 检查补数是否在哈希表中:检查这个补数是否已经在哈希表中。如果在,这意味着我们找到了一对元素,它们的和等于 target。我们可以直接返回这两个元素的下标。

  5. 将当前元素添加到哈希表中:如果补数不在哈希表中,将当前元素 nums[i] 及其下标 i 添加到哈希表中,然后继续检查下一个元素。

  6. 返回结果:当找到一对元素的和等于 target 时,我们返回它们的下标。

示例

用示例1来说明这个过程:

  • nums = [2,7,11,15]target = 9
  • 遍历数组:
    • 当 i = 0 时,nums[i] = 2,补数是 9 - 2 = 7。检查7是否在哈希表中。不在,所以将 2 和 0 添加到哈希表中。
    • 当 i = 1 时,nums[i] = 7,补数是 9 - 7 = 2。检查2是否在哈希表中。在,所以找到了一对元素,它们的和等于9。我们返回下标 [0, 1]

代码实现

class Solution {
    public int[] twoSum(int[] nums, int target) {
        
        //新建一个hashmap用来记录以及出现过的数
        Map<Integer,Integer> map = new HashMap<>();
        
        for(int i = 0; i < nums.length; i++){// 遍历数组
            if(map.containsKey(target - nums[i])){// 判断之前加入map中的数组中的值是否包含目标值
                return new int[]{i,map.get(target - nums[i])};// 找到就返回结果
            }
            map.put(nums[i],i);//没找到就将当前遍历值加入map中
        }
        return new int[0];

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值