两数之和
题目描述
这是LeetCode的第一题。
难度:简单。
解决方法
方法一:枚举
这是最简单的方法,使用两个循环,枚举数组中的每一个数x,并寻找数组中是否存在target-x。
class Solution {
public int[] twoSum(int[] nums, int target) {
int count=nums.length;
for(int i=0;i<count-1;i++){
for(int j=i+1;j<count;j++){
if(nums[i]+nums[j]==target)
return new int[]{i,j};
}
}
return new int[]{0,0};
}
}
方法二:哈希表
哈希表,也称为散列表,是一种数据结构,用于存储键值对。它通过将键映射到与之对应的值的方式来实现高效的数据检索。哈希表的主要思想是将键通过哈希函数转化成一个索引,然后将值存储在该索引处。
在方法一中,使用两个循环的时间复杂度太高了,对此,我们可以使用哈希表。枚举数组中的每一个数x,并将元素和索引以键值对 <nums[i],i> 的形式保存在哈希表中,使用containskey方法可以查找是否存在指定键target-x,get方法用于获取指定键对应的值。。
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,0};
}
}
这道题是LeetCode的第一道题,方法一很快就写出来了,但方法二还是看了题解才做出来。哈希表很早就学过了,但很少用到。
这是记录做LeetCode的第一题,我很菜,加油!