【LeetCode 力扣】1.两数之和 Java实现 哈希表
创始人
2024-01-22 10:28:26

题目链接: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(n2)O(n^2)O(n2)。那我们能不能把时间复杂度优化为 O(n)O(n)O(n)呢。

回看我们的逻辑,我们的本质是为 x 寻找 target - x,那我们现在要做的就是减少 寻找 target - x 的复杂度。对于此目的,我们要采取的方案就是哈希表,先在哈希表中寻找 target - x 是否存在,若存在则直接把 xtarget - 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 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};}
}

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
ps局部放大 放大某个部位的图... 软件类学习建议:边看边练习,可以先收藏后学习。一、使用Ctrl快捷键放大:Ctrl + +缩小:Ct...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
ps局部放大 放大某个部位的图... 软件类学习建议:边看边练习,可以先收藏后学习。一、使用Ctrl快捷键放大:Ctrl + +缩小:Ct...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...