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

【LeetCode】1. 两数之和(Java自用版)

哈希表法:

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

上面的Java代码是一个有效的解决方案,用于在整数数组nums中找到两个数的索引,使得它们的和等于给定的目标值target。下面是对该代码的详细分析:

  1. 初始化哈希表
    代码首先创建了一个HashMaphashtable),其中键是数组中的数字,值是对应数字的索引。这个哈希表用于存储已经遍历过的数组元素,以便在后续的迭代中快速查找它们的补数(即目标值减去当前元素的值)。
Map<Integer, Integer> hashtable = new HashMap<Integer, Integer>();
  1. 遍历数组
    代码通过for循环遍历数组nums。对于每个元素nums[i],它执行以下操作:
for(int i = 0; i < nums.length; i++) {
  1. 查找补数
    在循环内部,代码计算target - nums[i](即当前元素的补数),然后检查哈希表中是否包含这个补数。
if(hashtable.containsKey(target - nums[i])) {

如果哈希表中存在这个补数,那么它表示已经找到了一个解,即nums[i]和补数对应的元素,它们的和等于target。此时,代码创建一个包含这两个元素索引的整数数组,并返回它。

return new int[] {hashtable.get(target - nums[i]), i};
  1. 更新哈希表
    如果哈希表中不存在补数,代码将当前元素nums[i]及其索引i添加到哈希表中,以便在后续的迭代中查找。
hashtable.put(nums[i], i);
  1. 返回空数组
    如果遍历完整个数组后都没有找到满足条件的两个数,那么代码返回一个空的整数数组。
return new int[0];

总结
这个twoSum方法利用哈希表实现了O(n)时间复杂度的算法,其中n是数组nums的长度。由于哈希表的查找操作平均时间复杂度为O(1),因此整个算法的效率非常高。这个算法的关键在于利用哈希表来存储已经遍历过的元素,以便快速查找它们的补数。这种方法比使用嵌套循环来比较所有可能的元素对要高效得多。

相关文章:

  • 我在京东做数据分析,一位京东数据分析师的工作日常
  • 一篇复现Docker镜像操作与容器操作
  • 机器学习:处理jira工单的分类问题
  • 复盘一下我用过的设计模式
  • 如何忽略Chrome最小字号的限制
  • 机器学习神经网络由哪些构成?
  • 计算机网络:现代通信的基石
  • 阿里云倚天云服务器怎么样?如何收费?
  • WPF---1.入门学习
  • 生产计划数据模型,实现能源企业数字化高效管理
  • FastAPI+React全栈开发05 React前端框架概述
  • 时序预测 | Matlab实现SSA-BP麻雀算法优化BP神经网络时间序列预测
  • SQLite3 数据库的基本操作
  • docker-面试题
  • 探讨大数据、云计算与物联网的融合与发展
  • 「面试题」如何实现一个圣杯布局?
  • ➹使用webpack配置多页面应用(MPA)
  • 10个最佳ES6特性 ES7与ES8的特性
  • 78. Subsets
  • java小心机(3)| 浅析finalize()
  • JS函数式编程 数组部分风格 ES6版
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • Quartz初级教程
  • 关于List、List?、ListObject的区别
  • 首页查询功能的一次实现过程
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • #在 README.md 中生成项目目录结构
  • (C++17) std算法之执行策略 execution
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (一)为什么要选择C++
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • ***详解账号泄露:全球约1亿用户已泄露
  • .a文件和.so文件
  • .NET CLR Hosting 简介
  • .net core Swagger 过滤部分Api
  • .NET Core 中的路径问题
  • .Net Winform开发笔记(一)
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • [AIGC] 如何建立和优化你的工作流?
  • [AndroidStudio]_[初级]_[修改虚拟设备镜像文件的存放位置]
  • [Android实例] 保持屏幕长亮的两种方法 [转]
  • [java进阶]——方法引用改写Lambda表达式
  • [Jenkins] Docker 安装Jenkins及迁移流程
  • [LeetCode] 197. 上升的温度
  • [LeetCode]Reverse Linked List II
  • [luoguP2401] 不等数列
  • [Python] scikit-learn中数据集模块介绍和使用案例
  • [Python] 集合操作及方法总结
  • [python]bar_chart_race设置日期格式
  • [root]既然sudo 可以暂时获取root权限,那么为何还需要root这个用户呢