题目链接:两数之和三-数据结构设计
领扣 两数之和 III-数据结构设计
- 1、题目
- 2、思路
- 3、题解代码——Java版本
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 对象 SitesHashMap<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) {// 创建一个 HashMapHashMap<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 heremap.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
两个方法。