hashMap是否为现有键返回零值?

时间:2019-03-21 19:06:15

标签: java hashmap

我正在尝试编写一个简单的二和问题(给定一个唯一的整数数组,找到等于所需和的两个整数)。

我正在使用哈希图来获取所需的金额(当前金额的总和,如果可以在地图上找到,则为您的索引),并且哈希图设置为数组中的。但是,当我尝试运行该命令时,它对我失败了。我最终为测试用例返回零和零。我无法为自己的生活弄清楚原因。谢谢! 使用测试用例int nums = [3,2,4],int目标= 6。预期答案= [1,2],给定答案为[0,0]

public int[] twoSum(int[] nums, int target) {
    int[] returnArray = new int[2];
    Map<Integer,Integer> numsHash = new HashMap<Integer,Integer>();
    for(int i=0;i<nums.length;i++){
        numsHash.put(nums[i],i);
    }

    int tempSum=target;
    for(int j=0;j<nums.length;j++){

        if(numsHash.containsKey(tempSum-nums[j])){
            returnArray[1]=numsHash.get(nums[j]);
            returnArray[0]=numsHash.get(tempSum-nums[j]);
            return returnArray;
        }
        tempSum=target;
    }
    return returnArray;
}

1 个答案:

答案 0 :(得分:1)

因为,在比较数组的一个元素时,您正在检查Hashmap的所有元素,并且还包括要搜索的元素。最初,当数组元素为3时,您正在搜索targetSum - nums[0],即6-3=3(同一元素)。显然已经有3个了,它的索引是0。所以您得到[0,0]作为结果。

因此,在检查键targetSum-nums[j]是否在HashMap中的同时,还要检查结果索引是否与搜索的索引相同。如果结果索引与搜索元素的索引不同,则继续搜索。否则,请跳至下一个迭代。