【LeetCode 力扣】1.两数之和 Java实现 哈希表

力扣 第1题:两数之和(Java) 有人相爱,有人开车看海,有人力扣第一题就做不出来……第一题两数之和(万恶之源),劝退了不少小????????……在这里整理一下这道题的两种Java解法。 阅读详情

题目链接:1.两数之和

1 原题描述:

在这里插入图片描述

2 解题思路

初看题目相信大家都能想到枚举的做法,简单来说把数组里面的所有值,均两两组合相加。若结果与target相等,则将两个数字的下标返回即可。

代码实现1:

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

提交后,虽然能AC,但我们可以发现距离最优解仍然有很长的距离。
在这里插入图片描述
同时我们再对我们的代码分析,可以得出我们当前实现代码的时间复杂度为 O ( n 2 ) O(n^2) O(n2)。那我们能不能把时间复杂度优化为 O ( n ) O(n) O(n)呢。

回看我们的逻辑,我们的本质是为 x 寻找 target - x,那我们现在要做的就是减少 寻找 target - x 的复杂度。对于此目的,我们要采取的方案就是哈希表,先在哈希表中寻找 target - x 是否存在,若存在则直接把 x 和 target - x 的下标返回。若不存在,则将 x 加入哈希表中。

大致逻辑确定了,我们再继续处理一些细节。首先是这个哈希表怎么存储,通过前文分析,我们得知我们需要存储 数字 和 下标,而且我们还要通过 数字 来判断该数字是否存在哈希表中。相信大家已经能想到了,我们要采用的是 HashMap, 其中 key 用来存数字的值,这样我们就可以通过 map.containsKey 来判断该数字是否存在与哈希表中,value 用来存下标,这样返回下标的时候我们可以直接通过 key 获取,而不是再去数组里面找一遍了。

可能又有小伙伴会有这样的疑问,需要判断哈希表里获取的数字的下标是否与我当前 x 的下标一致,若 x = target - x 不判断会不会返回把这一个数字当成两个数字返回呢。其实这是不需要担心的,因为我们在哈希表中寻找 target - x 的时候,并没有将 x 存入哈希表中,所以这时获取的 target - x 一定不是我们当前的 x。

因为我们采用的哈希表, map.containsKey 的时间复杂度为 O ( 1 ) O(1) O(1),那么我们这样实现的整体时间复杂度即为 O ( n ) O(n) O(n),具体代码实现如下:

代码实现2:

class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer, Integer> map = 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, 0};
    }
}
【简单】力扣算法题解析LeetCode1:两数之和 本文介绍了在整数数组中寻找两数之和等于目标值的算法。通过哈希表优化查找过程,将时间复杂度从O(n²)降至O(n)。关键思路是边遍历边检查补数是否存在,避免重复计算。Java实现中预分配哈希表容量,单次遍历时先检查后存储,确保高效性和正确性。算法通过示例验证,时间复杂度O(n),空间复杂度O(n)。 阅读详情

相关推荐

自动驾驶预测决策规划八股

预测规划八股个人总结。

dawushixiange的博客 479

【LeetCode笔记】1. 两数之和(JAVA、哈希表)

文章目录一. 题目描述二. 解法1⃣️ 暴力破解2⃣️ 静态哈希表1. 为什么用哈希表来做2. 特殊情况:两数相同,map映射覆盖3⃣️ 动态哈希表4⃣️ 未解之谜 诶嘿,经典开头题目 一. 题目描述 二. 解法 1⃣️ 暴力破解 看到题干,首选暴力。 只需要遍历数组:对于数组中的每一个元素,都和后面的所有元素进行一次匹配即可。 class Solution { public int[] twoSum(int[] nums, int target) { for(int i=0;

只能说希望每日一更 283

5G中的RedCap

5G中的redcap

大家好,我是码农老gou,一名专注于编程技术的程序员。在这个博客中,我将与大家分享我在工作和学习中的经验、见解以及一些实用的技术干货。 2527

LeetCode-1-两数之和(JAVA-暴力枚举+哈希表)

​​​​​题目描述 解题思考 对整数数组nums[]遍历两次,找到nums[i]+nums[j]==target的i和j,返回i和j. 源码提交 class Solution { public int[] twoSum(int[] nums, int target) { int[] arry = new int[2]; for(int i=0;i<nums.length-1;i++){ for(int j=i+1;j<

junewgl 299

硬件工程师八大细分岗位详解:从芯片到整机的技术分工与职业选择

硬件工程作为电子系统设计的核心领域,涉及从芯片级到整机级的完整技术链条。其基本原理是通过电路设计、信号处理和功率管理等技术,将电子元件集成为功能完备的硬件系统。随着产品复杂度提升,硬件工程师岗位出现高度专业化分工,这种细分不仅提升了技术深度,更优化了团队协作效率。在工程实践中,信号完整性和电源完整性成为高速数字设计的两个关键技术挑战,直接影响系统稳定性。本文基于行业热词"硬件工程师"和"信号完整性",深入解析八大细分岗位的技术差异,帮助从业者明确职业发展方向,构建系统化的硬件设计思维。

weixin_33811539的博客 450

海康工业相机使用教程

海康工业相机连接电脑教程

qq_43251445的博客 2万+

两数之和(哈希表解法)---Java

力扣题目---两数之和哈希表解法--java

q1041126312的博客 288

【自然语言处理(NLP)实战】LSTM网络实现中文文本情感分析(手把手与教学超详细)

在当今数字化时代,人们在社交媒体、评论平台以及各类在线交流中产生了海量的文本数据。这些数据蕴含着丰富的情感信息,从而成为了深入理解用户态度、市场趋势,甚至社会情绪的宝贵资源。自然语言处理(NLP)的发展为我们提供了强大的工具,使得对文本情感进行分析成为可能。在这个领域中,长短时记忆网络(LSTM)凭借其能够捕捉文本序列中长距离依赖关系的能力,成为了情感分析任务中的一项重要技术。通过详细的步骤和示例代码,深入了解如何处理中文文本数据、构建LSTM模型、进行训练和评估。

halo的博客 2万+

LeetCode题解 01.两数之和

题目描述:两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 暴力法: 时间复杂度:O(n^2) class Solution { public int[] twoSum(

Gabbana的博客 308

高斯泼溅(Gaussian Splatting):3D建模的颠覆性革命

高斯泼溅(Gaussian Splatting):3D建模的颠覆性革命

yingtu666的博客 5156

【unity知识】最新的虚拟相机Cinemachine3简单使用介绍

本文介绍了Unity中Cinemachine 3虚拟相机系统的使用方法。相比旧版本,新版功能更强大且参数分类更直观。文章详细讲解了摄像机镜头参数、旋转控制(包括None、目标跟随、样条线推拉、旋转追随等6种模式)和位置控制(跟随、样条轨道、硬锁定等5种模式)。重点演示了样条轨道摄像机的创建与配置,以及如何实现第一人称和第三人称视角。通过丰富的GIF图示,展示了各种模式的运行效果,帮助用户快速掌握Cinemachine 3的核心功能。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 866

【java】【leetcode】两数之和 三种解法 暴力+滑窗+哈希表

解法一:双层循环 解题思路 观察函数块返回类型为int[] 引入int[] 对象 result。 双层循环,i从0开始,j在i前面,二者相加判断,不等于target就继续循环。 等于target就将i,j放进result内。 返回result。 代码 class Solution { public int[] twoSum(int[] nums, int target) { int[] result=new int[2]; for(int i=0;i< num

nruuu的博客 272

Unity与iOS原生交互实战指南

C#(DllImport) → C 接口(extern "C") → Objective‑C / SwiftObjective‑C → UnitySendMessage → C#(GameObject + public 方法)在写.mm文件;在里面写;C# 用声明;调用它,参数就是 string / 数值等;在.mm里做你想做的 iOS 原生操作。在 Unity 里准备一个常驻 GameObject,比如;上面挂一个脚本,写;在 iOS 插件中用;

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 1357

力扣-1. 两数之和

力扣-1. 两数之和题目描述示例:Java代码 题目描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + ...

Jack魏 590

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【LeetCode】【数组】1. 两数之和 Java实现 两种方案:暴力、哈希表

LeetCode 两数之和

guliguliguliguli的博客 221

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

力扣刷题_Java版 | 1.两数之和 | 考察哈希表

力扣刷题_Java版: 考察哈希表的三道题

weixin_51104915的博客 708

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

力扣简单题系列:两数之和(LeetCode 1)

这道题是力扣的经典题目,通过使用哈希表,我们可以将时间复杂度从 O(n²) 优化到 O(n)。掌握哈希表的使用对于解决类似的查找问题非常有帮助。希望这篇博客能帮助到正在学习算法的小伙伴们!

weixin_53910667的博客 586

LeetCode 1. 两数之和

给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。你可以按任意顺序返回答案。

polarours的博客 480

力扣热题100:两数之和

哈希表的 “值→索引” 映射:直接通过元素值快速定位其索引,避免二次遍历数组。

2401_88180276的博客 250

力扣HOT100-1 两数之和(Java实现)

1.只存在一个有效答案2.给一列数字数组nums,和一个目标值target,找到和为target的两数下标。

Dr_Si的博客 348

算法刷题记录——LeetCode篇(1.1) [第1~10题]

LeetCode1-10个人刷题总结。

weixin_42826353的博客 1345

LeetCode两数之和:哈希表优化与面试解析

哈希表作为计算机科学中的核心数据结构,通过键值对映射实现O(1)时间复杂度的快速查找。其底层通常采用数组+链表实现,通过哈希函数将键转换为数组索引。在算法设计中,哈希表常用于优化查找效率,是解决两数之和等经典问题的关键技术。以LeetCode第一题为例,暴力解法需要O(n²)时间复杂度,而利用哈希表可将复杂度降至O(n),完美诠释空间换时间的算法思想。这类优化在面试中经常被考察,特别是头部互联网企业的技术岗位,78%的面试会涉及此类基础算法题。掌握哈希表不仅能解决两数之和问题,还可扩展到三数之和、字母异位词

weixin_34417200的博客 325

力扣1.两数之和

力扣题目解析。

qq_51738987的博客 292

LeetCode 1. 两数之和 —— 从暴力破解到哈希表,彻底搞懂 HashMap

这是 LeetCode 的第一题,也是无数算法学习者梦开始的地方。它看似简单,却隐藏着数据结构中最重要的思想之一:空间换时间。哈希表到底是怎么建立的?为什么它能“瞬间”找到我要的值?Java 里为什么不能写 hashmap[nums[i]] = i?先判断,后插入—— 避免使用同一个元素两次。哈希表的键是数组元素的值,值是下标—— 不要搞反。Java 不能用 [ ] 操作 HashMap—— 记住用 put 和 get。

noitcivnoc的博客 1016

浩哥的力扣刷题记录——1. 两数之和

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值target的那两个整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。其中包含两种解题思路,供大家一起学习思考。

Jack魏 614

Leecode 1.两数之和(Java 哈希表)

两数之和(Java 哈希表)

weixin_52188227的博客 296
上一篇: 昇思 MindSpore 安装教程
下一篇: 我的创作纪念日
爱写BUG的老冉
博客等级 码龄8年 2357粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值