题目链接:两数之和三-数据结构设计
领扣 两数之和 III-数据结构设计
1、题目
描述:
设计并且实现一个TwoSum
类,需要支持如下操作:
add
:把这个数添加到内部的数据结构中find
:是否存在任意一对数字之和等于这个数值。
样例:
add(1);add(3);add(5);
find(4)//返回true
find(7)//返回false
2、思路
利用Java的HashMap
,键值对形式保存添加该数值。
HashMap
的put方法可以添加元素,例如下面的代码:
// 引入 HashMap 类
import java.util.HashMap;
public class RunoobTest {
public static void main(String[] args) {
// 创建 HashMap 对象 Sites
HashMap<Integer, String> Sites = new HashMap<Integer, String>();
// 添加键值对
Sites.put(1, "Google");
Sites.put(2, "Runoob");
Sites.put(3, "Taobao");
Sites.put(4, "Zhihu");
System.out.println(Sites);
}
}
HashMap
是一个散列表,存储的内容就是键值对(key-value)映射。
其次:find
可以通过遍历map,利用HashMap
的API的getOrDefault()
方法,该方法可以获取指定key
对应的value,如果找不到key,则返回默认的默认数值;containsKey
该方法就是审查map中是否存在指定key对应的映射关系,如下示例代码:
import java.util.HashMap;
class Main {
public static void main(String[] args) {
// 创建一个 HashMap
HashMap<Integer, String> sites = new HashMap<>();
// 往 HashMap 添加一些元素
sites.put(1, "Google");
sites.put(2, "Runoob");
sites.put(3, "Taobao");
System.out.println("sites HashMap: " + sites);
//检查 key 为 1 是否存在
if(sites.containsKey(1)) {
System.out.println("key 为 1 存在于 sites 中");
}
}
}
3、题解代码——Java版本
public class TwoSum {
HashMap<Integer, Integer> map;
public TwoSum() {
// 构造方法实例化
map = new HashMap<>();
}
/**
* @param number: An integer
* @return: nothing
*/
public void add(int number) {
// write your code here
map.put(number, map.getOrDefault(number, 0) + 1);
}
/**
* @param value: An integer
* @return: Find if there exists any pair of numbers which sum is equal to the value.
*/
public boolean find(int value) {
// write your code here
// a = c + b || b = a - c 类似理解
int diff;
for (int num : map.keySet()) {
diff = value - num;
if (map.containsKey(diff)) {
if (diff != num || map.get(diff) > 1) {
return true;
}
}
}
return false;
}
}
注意:该题主要涉及Java的HashMap应用和
关键API-containsKey 以及 getOrDefault
两个方法。