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

【LeetCode100】--- 1.两数之和【复习回滚】

题目传送门

解法一:暴力枚举(也是最容易想到的) 

class Solution {public int[] twoSum(int[] nums, int target) {int n = nums.length;for(int i = 0; i < n; i++){for(int j = i+1; j<n; j++){if(nums[i] + nums[j] == target){return new int[]{i,j};}}}return new int[]{-1,-1};}
}

注意 初始化 j
int j = i+1
因为j和i不能重复。 

复杂度分析:

时间复杂度:O(N2) 双重循环
空间复杂度:O(1)代码只使用了几个变量 i 、j、n。

解法二:哈希表 (HashMap)
 

class Solution {public int[] twoSum(int[] nums, int target) {Map<Integer,Integer> map = new HashMap<>();int n = nums.length;for(int i = 0; i<n; i++){int x = target-nums[i];if(map.containsKey(x)){return new int[]{map.get(x),i};}map.put(nums[i],i);}return new int[]{-1,-1};}
}

哈希表中
key:记录数组中的数
value:记录数组下标
直接在哈希表中查找  map.containsKey(x)
x = targer-num[ i ]   
若找到了说明此时  x+num[i] = target

找到答案了
返回数组 new int[]{map.get(x),i}
因为此时 i 一定是两个数中靠数组后面的那个数的数组下标
而map.get(x) 就是数组中两数靠前的数组下标

如果没找到就 map.put(nums[i],i);
题目说了会有一组答案的,因此继续在哈希表中找 x = targer-num[ i ] 总会找到答案。

继续循环

复杂度分析

时间复杂度:O(n)一次for循环,最多循环n次。而哈希表查找每次只需要常量次。
空间复杂度:O(n)建立了哈希表,最快情况 数组中 n-1 个数全部添加进来

http://www.xdnf.cn/news/15046.html

相关文章:

  • 学习日记-spring-day45-7.10
  • 深入理解 Linux 中的 stat 函数与文件属性操作
  • 710 Mybatis实战
  • Using Spring for Apache Pulsar:Transactions
  • PyTorch Tensor 操作入门:转换、运算、维度变换
  • 【TCP/IP】11. IP 组播
  • 深入解析JVM内存结构与垃圾回收机制
  • Boost.Asio学习(3):异步读写
  • Spring for Apache Pulsar->Reactive Support->Message Production
  • Linux的DNS域名解析服务
  • 多线程 JAVA
  • 表达式索引海外云持久化实践:关键技术解析与性能优化
  • 深入浅出 Python Asynchronous I/O:从 asyncio 入门到实战
  • 2025.07.09华为机考真题解析-第二题200分
  • FlashAttention 快速安装指南(避免长时间编译)
  • LeetCode经典题解:49、字母异位词分组
  • 西部数据WD授权代理商-深圳同袍存储科技有限公司
  • 5种使用USB数据线将文件从安卓设备传输到电脑的方法
  • Sophix、Tinker 和 Robust 三大主流 Android 热修复框架的详细对比
  • C语言顺序表:从零开始,解锁数据结构之门!
  • 无人机三叶螺旋桨概述
  • git fetch的使用
  • OpenSearch 视频 RAG 实践
  • 【libm】 18 泛型绝对值函数 fabs(fabs.rs)
  • Canny边缘检测(cv2.Canny())
  • ACL协议:核心概念与配置要点解析
  • 从真人到数字分身:3D人脸扫描设备在高校数字人建模教学中的应用
  • 在 Mac 上使用 Git 拉取项目:完整指南
  • 【科研绘图系列】R语言探索生物多样性与地理分布的可视化之旅
  • BGP 路由优选属性(6)【Ogn】