LeetCode题目:1.两数之和 解题思路及Java实现

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

思路:两数的和已知,可以遍历数组,计算target减去数组元素的值,将它作为key,遍历到的数组元素下标作为value存到map中,下一次循环通过containsKey来查map中是否有可以和当前元素相加等于target的key,如果有的话取出value,这样一来就能取到两个下标了。
代码:

package code;

import java.util.HashMap;
import java.util.Hashtable;

public class demo01 {
    public int[] towSum(int[] nums,int target){
        HashMap<Integer, Integer> hashMap = new HashMap<>();
        if(nums != null && nums.length>0){
            for (int i=0;i<nums.length;i++){
                //必须先判断map中是否存在和当前数组元素值相同的key,避免target和当前元素的差值等于当前元素,会返回类似[0,0]这样的错误结果
                if (hashMap.containsKey(nums[i])){
                    Integer index = hashMap.get(nums[i]);
                    int[] indexArr = {index,i};//考虑顺序的话 先存index再存当前元素的下标
                    return indexArr;
                }
                hashMap.put(target-nums[i],i);//target和当前元素的差值为key,下标为value,存入map
            }
        }
        return null;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值