我是一个初级程序员,致力于两个求和问题。给定一个整数数组以及一个整数,目标。程序的目的是找出整数数组中的哪两个数字加到目标整数中。我所看到的最有效的解决方案是非常巧妙地迭代数组中的所有整数,并检查数组中的每个整数与目标数之间的差异是否是数组中的另一个整数。那这两个人就是解决办法。我的问题是HashMap部分。如果空的HashMap .containsKey()是空的并且没有键,它将如何工作?
class Solution {
public int[] twoSum(int[] nums, int target) {
int n=nums.length;
Map<Integer,Integer> map=new HashMap<>();
int[] result=new int[2];
for(int i=0;i<n;i++){
if(map.containsKey(target-nums[i])){
result[1]=i;
result[0]=map.get(target-nums[i]);
return result;
}
map.put(nums[i],i);
}
return result;
}
}我试图研究解决方案解释,但是所有这些解释都说,解决方案检查值是否在映射中,但是如果它是空的,并且从未链接到整数数组,那么映射中的值将如何?非常感谢你的帮助。
发布于 2022-11-06 03:11:35
我给你一本电话簿。我问你“瑞恩·西格里斯特”是不是在里面。你打开它的意图是扫描它(或者你会更聪明,使用一种奇特的算法,比如打开它到中间页,看看你应该去“更高”还是“更低”)--结果电话簿是空的。
正确的答案当然是‘不,瑞恩·西格里斯特不在这个空电话簿里’。
HashMap也没什么不同。如果在空列表上调用false,则它将返回false。为什么不呢?
在第一次循环时,所述的算法不会执行任何操作,但是请注意,在for检查结束时,无论if ( containsKey )检查完成还是失败,都会向地图中添加一个条目。因此,第二个,也是进一步的循环,映射不再是空的。
发布于 2022-11-06 03:21:33
短版本:如果映射为空且不包含键,则为。然后这句话:
map.put(nums[i],i);仍然会被处决。这是因为它在if检查之外。
长版本
因此,当代码第一次遍历数组时,HashMap一开始总是空的,因为它是这样初始化的:
Map<Integer,Integer> map=new HashMap<>();然后,if校验的第一次迭代返回false:
if(map.containsKey(target-nums[i]))但是它仍然执行代码行,它将映射与索引i处的num值与索引i作为映射的值相关联。
然后循环将继续迭代,直到找到解决方案或循环终止为止。
https://stackoverflow.com/questions/74333011
复制相似问题