<!--
 * @Author: buji 1493005357@qq.com
 * @Date: 2025-11-22 20:42:32
 * @LastEditors: buji 1493005357@qq.com
 * @LastEditTime: 2025-11-22 20:50:01
 * @FilePath: \flower-rain-2\docs\syl.md
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->

## 两数之和

给定一个整数数组`nums`和一个整数目标值`target`。在该数组中找处和为目标值`target`的两个整数，并返回它们的数组下标。

## 题解

```java
    public class Solution{
        public int[] GetTwoNums(int[] nums , int target){
            Map<integer,integer>map = new HashMap<integer,integer>();
            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`;

---

## 评价
#### 为什么用 Map 接口而不是直接 HashMap 定义？
- `Map`是Java集合框架中接口，定义了“键值对存储”的统一规范：`put`、`get`、`containskey`等方法。`HashMap`是`Map`接口的具体实现类。
- 用`Map`声明变量，是因为此代码只需依赖“键值对存储”的抽象能力，不绑定`HashMap`。
- 如果直接用`HashMap`声明，未来切换实现时，需要修改所有需要用到`map`的地方，维护成本极高。
- 哈希表能够实现O(1)快速查找。

#### 时间和空间复杂度比较
- 暴力查找，时间：O(n²) 空间O(1)：
- 哈希查找，时间：O(n)  空间：O(n)
---



