本文已参与[新人创作]活动,一起开启掘金创作之路。
题目 两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
已知两数之和即target,遍历数组,求差值,判断map中是否存在该值,存在则返回遍历的数的下标和map中的值,否则存入map中
代码
class Solution {
public int[] twoSum(int[] nums, int target) {
/*
题目重点:
返回的是下标
对应一个答案
同一元素不能重复出现
*/
// 创建动态哈希表,元素顺序存取顺序不能保持一致
Map<Integer,Integer>map=new HashMap<Integer,Integer>();
// 遍历数组
for(int i=0;i<nums.length;i++){
// 求差值
int sub=target-nums[i];
// 判断哈希表中的key值是否有该差值
if(map.containsKey(sub)){
// 如果有
return new int[] {i,map.get(sub) };
}
else{
// 如果没有,则存入哈希表
// key为元素
// value为下标
map.put(nums[i],i);
}
}
return null;
}
}
知识点
(1)
Map 是一种键-值对(key-value)集合,
Map 集合中的每一个元素都包含一个键对象和一个值对象。
其中,键对象不允许重复,而值对象可以重复,
并且值对象还可以是 Map 类型的,就像数组中的元素还可以是数组一样。
(2)
Map 接口主要有两个实现类:HashMap 类和 TreeMap 类。
其中,HashMap 类按哈希算法来存取键对象,
而 TreeMap 类可以对键对象进行排序。
(3)函数
1. containsKey() 方法检查 hashMap 中是否存在指定的 key 对应的映射关系。
containsKey() 方法的语法为:
map.containsKey(Object key)
如果 hashMap 中存在指定的 key 对应的映射关系返回 true,否则返回 false。
2.put() 方法将指定的键/值对插入到 HashMap 中。
put() 方法的语法为:
hashmap.put(K key,V value)
注:hashmap 是 HashMap 类的一个对象。
参数说明:
key - 键
value - 值
返回值
如果插入的 key 对应的 value 已经存在,则执行 value 替换操作,
返回旧的 value 值,如果不存在则执行插入,返回 null。
3.get() 方法获取指定 key 对应对 value。
get() 方法的语法为:
hashmap.get(Object key)
注:hashmap 是 HashMap 类的一个对象。
参数说明:
key - 键
返回值
回与指定 key 所关联的 value。