LeetCode第一题详解:两数之和的暴力解法与哈希表优化
创作时间:
作者:
@小白创作中心
LeetCode第一题详解:两数之和的暴力解法与哈希表优化
引用
CSDN
1.
https://blog.csdn.net/2301_78566776/article/details/143580630
本文将为大家介绍LeetCode第一题“两数之和”的两种解法:暴力解法和哈希表解法。通过对比两种方法的时间复杂度和空间复杂度,帮助读者理解如何在实际编程中选择最优解。
题目描述
给定一个整数数组 nums
和一个整数目标值 target
,请你在该数组中找出和为目标值 target
的那两个整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。你可以按任意顺序返回答案。
示例:
方法一:暴力解法
暴力解法是最直观的解法,通过两个嵌套循环遍历数组中的每一个数,查看是否有与之对应的数使得二者之和为 target
。
值得注意的是:每一个位于 x
之前的元素都已经和 x
匹配过,因此不需要再进行匹配。而每一个元素不能被使用两次,所以我们只需要在 x
后面的元素中寻找即可。(所以下面代码第二层循环的开始是 j=i+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[] {};
}
}
- 时间复杂度:O(N^2),其中 N 是数组中的元素数量。
- 空间复杂度:O(1)。
方法二:哈希表解法
哈希表法体现了“空间换时间”的思想。在遍历的同时,记录一些信息,以省去一层循环。具体来说,需要记录已经遍历过的数值和它对应的下标,可以借助查找表实现。
查找表通常有:哈希表、平衡二叉搜索树。我们不需要维护所存数组的顺序性,使用哈希表即可。
图解说明
- 首先我们把第一个元素存入哈希表中,位置为0
- 此后将后续元素存入哈希表,存入前需要检查哈希表里有没有和它配对的元素,有的话返回这两个元素的下标,没有的话,将该元素存入哈希表。
- 哈希表的长度为len-1即可。
代码实现
class Solution {
public int[] twoSum(int[] nums, int target) {
int len=nums.length;
//初始化哈希表,要求规定其大小
Map<Integer,Integer>hashMap=new HashMap(len-1);
//存入第一个元素
hashMap.put(nums[0],0);
//其余元素循环遍历
for(int i=1;i<len;i++){
//定义另一个要在哈希表中寻找的元素
int another =target-nums[i];
//判断哈希表中是否存在
if(hashMap.containsKey(another)){
//如果存在,返回二者下标
return new int[]{i,hashMap.get(another)};
}else{
//不存在将该元素存入哈希表
hashMap.put(nums[i],i);
}
}
//任意返回
return new int[] {0};
}
}
注意:根据题目规定,代码是不会执行到 return new int[] {0};
这一行的。所以我们可以返回任意值。当然我们也可以抛回一个异常:
throw new IllegalArgumentException("No two sum solution");
通过对比两种解法,我们可以看到哈希表解法在时间复杂度上有明显的优势,虽然牺牲了一定的空间复杂度,但在实际应用中通常是一个值得的选择。
热门推荐
如何进行数据治理?数据治理实施的七大步骤流程!
北京到盘山一日游攻略,探索北国山水,体验古韵风情
《钱:7步创造终身收入》:托尼·罗宾斯的理财指南
清朝十二位皇帝在位时间及年号一览
最高法判例:如何准确理解专利权利要求的技术特征
喝一瓶啤酒后多久可以开车?老司机用经验和数据给你算一下时间
如何选择适合的技术路线?
拖欠工资劳动法规定
MBTI|INFJ恋爱全解析:爱情观、速配指数、相处攻略
《美国队长4》首波口碑出炉!两极分化,主角获赞剧情被喷
十部最佳心理恐怖片,第一部我不敢看
中国人的吸烟史开始于哪个朝代?
天津十大特产:从麻花到芦台春酒,每一样都承载着津城记忆
大一新生如何做好职业规划:结合专业选择与实践的七步指南
海豹突击队实力如何?地狱训练5天睡4小时,40分钟击毙本拉登
如何对计算机上没有声音的问题进行故障处理或解决计算机音频问题
乙巳春节趣谈:春节日期原来是这样来的……
中国“十九年七闰法”:史记记载令人不解,西方编造又一历史?
《活着》最经典的4句人生箴言,渡了无数人
备考期间如何管理压力,保持良好心态
如何用《高效海綿閱讀法》增加閱讀效率?
IP地址是否会泄露个人隐私?详细解读与保护方法
小细胞肺癌,国内外治疗方案大比拼(2025.3版)
南京邮电大学专业排名一览表2024(附:王牌特色专业)
提升工作效率:高效管理电子邮件的策略
盘点二次元哪吒形象:从1964到2025,你最钟意哪一版?
古人如何知道冬至是哪一天?其实,是用影子算出来的
小细胞肺癌,国内外治疗方案大比拼(2025.3版)
飞手职业的新机遇:低空经济如何重塑无人机飞行培训?
大学C++程序设计课程开发指南——开发环境搭建