我正在尝试编写一个简单的二和问题(给定一个唯一的整数数组,找到等于所需和的两个整数)。
我正在使用哈希图来获取所需的金额(当前金额的总和,如果可以在地图上找到,则为您的索引),并且哈希图设置为数组中的
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;
}
答案 0 :(得分:1)
因为,在比较数组的一个元素时,您正在检查Hashmap的所有元素,并且还包括要搜索的元素。最初,当数组元素为3时,您正在搜索targetSum - nums[0]
,即6-3=3
(同一元素)。显然已经有3个了,它的索引是0。所以您得到[0,0]
作为结果。
因此,在检查键targetSum-nums[j]
是否在HashMap
中的同时,还要检查结果索引是否与搜索的索引相同。如果结果索引与搜索元素的索引不同,则继续搜索。否则,请跳至下一个迭代。