From 7d9e15663cd986914c00b1792f75617585a5aa01 Mon Sep 17 00:00:00 2001 From: buji <1493005357@qq.com> Date: Sat, 22 Nov 2025 20:52:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=91=E6=B7=BB=E5=8A=A0=E4=BA=86=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/syl.md | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 55 insertions(+), 3 deletions(-) diff --git a/docs/syl.md b/docs/syl.md index b86b967..7bc4f31 100644 --- a/docs/syl.md +++ b/docs/syl.md @@ -1,5 +1,57 @@ + + +## 两数之和 + +给定一个整数数组`nums`和一个整数目标值`target`。在该数组中找处和为目标值`target`的两个整数,并返回它们的数组下标。 + +## 题解 + +```java + public class Solution{ + public int[] GetTwoNums(int[] nums , int target){ + Mapmap = new HashMap(); + for(int i = 0; i < nums.length ; i++){ + if(map.containskey(target - nums[i])){ + return new int[]{map.get(target - nums[i]),i}; + } + map.put(nums[i],i); + } + return new int[0]; + } + } +``` + +## 解释 +#### Map +- `Map`是Java中的键值对集合 ; +- 存储的是[key -> value]的映射关系 ; +#### map.containskey() +- 判断`map`中是否存在`target - nums[i]`; +#### map.put() +- 存入map,`nums[i]`作为`key`,`i`作为`value`; +#### map.get() +- 根据传入的`key`,从`HashMap`中获取对应的`value`; -#syl --- -content -#buji + +## 评价 +#### 为什么用 Map 接口而不是直接 HashMap 定义? +- `Map`是Java集合框架中接口,定义了“键值对存储”的统一规范:`put`、`get`、`containskey`等方法。`HashMap`是`Map`接口的具体实现类。 +- 用`Map`声明变量,是因为此代码只需依赖“键值对存储”的抽象能力,不绑定`HashMap`。 +- 如果直接用`HashMap`声明,未来切换实现时,需要修改所有需要用到`map`的地方,维护成本极高。 +- 哈希表能够实现O(1)快速查找。 + +#### 时间和空间复杂度比较 +- 暴力查找,时间:O(n²) 空间O(1): +- 哈希查找,时间:O(n) 空间:O(n) +--- + + +