
在理解two sum算法之前,首先需要明确hashmap中containskey()方法的核心功能。当对一个hashmap实例调用containskey(key)方法时,它会检查该映射中是否存在指定的键。如果hashmap是空的,即其中不包含任何键值对,那么无论传入何种key,containskey()方法都将返回false。这符合直观逻辑:一个空的容器自然不会包含任何元素。
例如,如果您有一个空的电话簿,当被问及某个特定姓名是否在其中时,答案必然是“否”,因为电话簿中没有任何条目。HashMap的行为与此类似,它会忠实地报告其当前状态。
Two Sum 问题是一个经典的算法面试题:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。
最直接的解法是使用两层循环,时间复杂度为 O(n²)。然而,利用 HashMap 可以将其优化到 O(n) 的时间复杂度。以下是使用 HashMap 解决 Two Sum 问题的典型 Java 代码:
class Solution {
public int[] twoSum(int[] nums, int target) {
int n = nums.length;
Map<Integer, Integer> map = new HashMap<>(); // 初始化一个空的HashMap
int[] result = new int[2];
for (int i = 0; i < n; i++) {
// 计算当前元素与目标值的差值
int complement = target - nums[i];
// 检查HashMap中是否已存在这个差值
if (map.containsKey(complement)) {
// 如果存在,说明找到了配对的两个数
result[1] = i; // 当前元素的索引
result[0] = map.get(complement); // 差值对应的元素的索引
return result; // 返回结果
}
// 将当前元素及其索引放入HashMap
// 供后续迭代使用
map.put(nums[i], i);
}
return result; // 如果没有找到,返回默认结果(通常不会发生,因为题目保证有解)
}
}初学者可能会对上述代码中map.containsKey(target - nums[i])在HashMap初始为空时如何工作感到困惑。关键在于理解HashMap是如何在循环过程中被“动态填充”的。
立即学习“Java免费学习笔记(深入)”;
第一次迭代 (i = 0):
第二次迭代 (i = 1):
后续迭代:
以上就是Java HashMap在Two Sum问题中的核心机制解析的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号