1. 两数之和

1. 两数之和

1. 两数之和

要求时间复杂度小于O(n2),可以使用哈希表实现。

思路

  • 我们在遍历数组时,每访问一个元素 nums[i],就查看之前是否已经存在一个数 target - nums[i]
  • 如果存在,说明找到了两个数,它们的和为 target,直接返回这两个下标。
  • 使用 HashMap<Integer, Integer> 存储每个数字的值和它的下标,便于快速查找。

复杂度分析

  • 时间复杂度:O(n)
    只需遍历数组一次,哈希表的插入和查找操作均为 O(1)
  • 空间复杂度:O(n)
    最坏情况下需要存储所有元素的哈希表

代码

import java.util.HashMap;

public class TwoSum {
    public int[] twoSum(int[] nums, int target) {
        HashMap<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 two sum solution");
    }
}

posted @ 2025-07-25 00:57  quanht  阅读(14)  评论(0)    收藏  举报