今天我们分享的题目是LeetCode的第一题,两数之和,我们先看下题目描述。
我们之前说过一个做题技巧,就是如果题目描述出现以下题眼:查找元素是否出现过,类似的我们首先先到的是使用哈希表,那么本道题我们应该选择哪一种数据结构呢?题目要求是返回两个元素的下标,并且该题的数据较大,因此我们考虑使用Map
集合进行题解。
解题思路:我们首先开拓一个Map
集合,该Map
集合用于遍历传入的nums
数组,如果说集合中存在目标值(目标值=target-遍历的当前元素值),如果存在目标值将数组下标进行返回。如果没有存在目标值,将该元素添加进map
集合,进行下一个遍历。
具体的解题我们可以结合以下代码进行讲解:
class Solution {
public int[] twoSum(int[] nums, int target) {
int arr[]=new int[2];
/**
* 这里我们需要注意的点是map集合的key和value存的是什么
* 这里的key存放的应该是元素,value存放的是数组的下标
* 因为我们本道题的题目要求是返回元素所在的下标。
*/
Map<Integer,Integer> maps=new HashMap<>();
int i=0;
//存放目标值
int k=0;
for (i=0;i<nums.length;i++){
//计算目标值
k=target-nums[i];
if (maps.containsKey(k)){
//找到了目标值进行返回
arr[0]=i;
arr[1]=maps.get(k);
return arr;
}
//没有找到目标值,将本次遍历的元素及其下标加入到map集合
maps.put(nums[i],i);
}
//循环结束没有找到目标元素返回空数组。
return arr;
}
}
以下是map集合函数的解释:
Map.containsKey(key)是Java中Map接口定义的方法之一,用于检查指定的键是否存在于Map中。map.containsKey方法返回了一个布尔值,表示键是否存在于Map中。根据containsKey()方法的返回值,你可以进一步根据情况来处理Map中是否包含指定的键。
Map.get(key)是Java中Map接口定义的方法之一,用于获取指定键对应的值。它接受一个键作为参数,并返回与该键关联的值。
那么本道题的讲解就到这里结束了,创作不易,希望给博主个小小的3连谢谢!