当前位置: 首页 > news >正文

1.两数之和(Java)

1. 题目描述

LeetCode 1. 两数之和(Two Sum)

给定一个整数数组 nums 和一个目标值 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. 解题思路

方法:哈希表(HashMap)

我们可以使用 哈希表HashMap)来存储数组中已经遍历过的元素及其索引。

思路如下:

  1. 遍历 nums 数组,对于每个元素 nums[i],计算它的补数 target - nums[i]

  2. 检查这个补数是否已经存在于 HashMap 中。

    • 如果存在,说明找到了满足条件的两个数,返回它们的索引。

    • 如果不存在,将 nums[i] 及其索引存入 HashMap,继续遍历。


3. Java 代码实现

class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer, Integer> ma = new HashMap<>();
        int[] ans = new int[2];
        for (int i = 0; i < nums.length; i++) {
            int tmp = target - nums[i];
            if (ma.containsKey(tmp)) {
                ans[0] = ma.get(tmp);
                ans[1] = i;
                return ans; // 立即返回,避免继续遍历
            } else {
                ma.put(nums[i], i);
            }
        }
        return ans; // 题目保证一定有解
    }
}

4. 复杂度分析

  • 时间复杂度:O(n)

    • 只需遍历数组一次,每次操作(查找和插入 HashMap)都是 O(1) 的时间复杂度。

  • 空间复杂度:O(n)

    • 需要存储 nums 中最多 n 个不同的元素。


5. 总结

  1. 该题目是经典的哈希表应用,利用 HashMap 可以高效查找所需的数值。

  2. 通过 target - nums[i] 计算补数,并在 HashMap 中查找是否存在,可以快速确定答案。

  3. 代码整体逻辑清晰,时间复杂度 O(n),适用于大多数情况。

希望这篇文章能帮助你理解 两数之和(Two Sum) 的解法!

相关文章:

  • 北斗储罐位移监测系统解决方案
  • java倒序题变形题重温
  • 在Ubuntu中固定USB设备的串口号
  • QML中的附加属性和附加信号处理程序
  • [特殊字符]《Curve DAO 系统学习目录》
  • Java 面向对象编程中 static 的深度剖析与实践
  • jdbc入门
  • Java 日志技术全面解析与实践教程
  • 多线程—线程安全集合类与死锁
  • 3.23周赛补题
  • C#:第一性原理理解日志(log)
  • 从零实现Json-Rpc框架】- 项目实现 - 基于Dispatcher模块的RPC框架
  • `git commit --amend` 详解:修改提交记录的正确方式
  • Content-Type设置内容类型
  • React受控表单绑定
  • wx201基于ssm+vue+uniapp的购物系统设计与实现小程序
  • J2EE框架技术 第二章 Maven环境搭建及使用
  • 向字符串添加空格
  • JavaScript函数-函数的概念
  • 列表,元组,字典,集合,之间的嵌套关系