Java 两数之和:哈希表秒杀法(附记忆口诀)

63 阅读1分钟

以下是Java实现“两数之和”的代码,附带注释、记忆口诀:

代码实现(带注释)

import java.util.HashMap;
import java.util.Map;

public class TwoSum {
    public int[] twoSum(int[] nums, int target) {
        // 哈希表存储:值 -> 索引(快速查找互补数)
        Map<Integer, Integer> map = new HashMap<>();
        
        for (int i = 0; i < nums.length; i++) {
            // 计算当前元素的互补数(目标 - 当前值)
            int complement = target - nums[i];
            
            // 若互补数已在哈希表中,直接返回两个索引
            if (map.containsKey(complement)) {
                return new int[]{map.get(complement), i};
            }
            
            // 否则将当前值和索引存入哈希表
            map.put(nums[i], i);
        }
        
        // 题目保证有解,此处仅为避免编译错误
        throw new IllegalArgumentException("No solution");
    }
}

记忆口诀

两数之和找索引,哈希表来帮大忙
遍历数组算互补,存在就把索引返
不存在就存当前,一次遍历效率高

关键点记忆

  1. 核心思路:用哈希表存储已遍历元素的值和索引,通过“互补数”(target - 当前值)快速查找
  2. 时间复杂度:O(n)(只需一次遍历)
  3. 空间复杂度:O(n)(哈希表最多存储n个元素)