1 两数之和

题目链接: LeetCode

1 两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 **和为目标值 **target  的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。

你可以按任意顺序返回答案。

示例 1:


**输入:**nums = [2,7,11,15], target = 9
**输出:**[0,1]
**解释:**因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例 2:


**输入:**nums = [3,2,4], target = 6
**输出:**[1,2]

示例 3:


**输入:**nums = [3,3], target = 6
**输出:**[0,1]

提示:

  • 2 <= nums.length <= 104
  • -109 <= nums[i] <= 109
  • -109 <= target <= 109
  • 只会存在一个有效答案

进阶:你可以想出一个时间复杂度小于 O(n2) 的算法吗?

Related Topics: 数组, 哈希表

Likes: 19838 | Dislikes: 0

解题代码

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

/**
 * @author Charlie Zhang
 * @version v1.0
 * @date 2025-07-05 09:15:47
 * @description 1 两数之和
 */
public class TwoSum {
    public static void main(String[] args) {
        Solution solution = new TwoSum().new Solution();
    }

    class Solution {
        public int[] twoSum(int[] nums, int target) {
            // 创建map
            Map<Integer, Integer> map = new HashMap<>();

            // 遍历数组
            for (int i = 0; i < nums.length; i++) {
                // 遍历当前元素,并在map中寻找是否有匹配的key
                int key = target - nums[i];
                // 存在则返回结果
                if (map.containsKey(key)) {
                    return new int[]{map.get(key), i};
                }

                // 如果没找到匹配对,就把访问过的元素和下标加入到map中
                map.put(nums[i], i);
            }

            // 没有匹配的key
            return new int[0];
        }
    }

}
posted @ 2025-10-02 10:43  Charlie_Byte  阅读(15)  评论(0)    收藏  举报