ToB企服应用市场:ToB评测及商务社交产业平台
标题:
力扣 170. 两数之和 III - 数据布局设计 two-sum III
[打印本页]
作者:
知者何南
时间:
2024-11-11 20:30
标题:
力扣 170. 两数之和 III - 数据布局设计 two-sum III
数组系列
力扣数据布局之数组-00-概览
力扣.53 最大子数组和 maximum-subarray
力扣.128 最长一连序列 longest-consecutive-sequence
力扣.1 两数之和 N 种解法 two-sum
力扣.167 两数之和 II two-sum-ii
力扣.170 两数之和 III two-sum-iii
力扣.653 两数之和 IV two-sum-IV
力扣.015 三数之和 three-sum
力扣.016 最靠近的三数之和 three-sum-closest
力扣.259 较小的三数之和 three-sum-smaller
题目
题目描述
设计一个接收整数流的数据布局,该数据布局支持查抄是否存在两数之和即是特定值。
实现 TwoSum 类:
TwoSum() 使用空数组初始化 TwoSum 对象
void add(int number) 向数据布局添加一个数 number
boolean find(int value) 寻找数据布局中是否存在一对整数,使得两数之和与给定的值相当。如果存在,返回 true ;否则,返回 false 。
示例:
输入:
["TwoSum", "add", "add", "add", "find", "find"]
[[], [1], [3], [5], [4], [7]]
输出:
[null, null, null, null, true, false]
复制代码
解释:
TwoSum twoSum = new TwoSum();
twoSum.add(1); // [] --> [1]
twoSum.add(3); // [1] --> [1,3]
twoSum.add(5); // [1,3] --> [1,3,5]
twoSum.find(4); // 1 + 3 = 4,返回 true
twoSum.find(7); // 没有两个整数加起来等于 7 ,返回 false
复制代码
思路
这一题和 001 第一题是一样的,可以参考 T001 和 T167 的解法,这里把这一题单独拿出来只是为了学习的系统性。
所以不做过多的展开。
区别
这一题另有一个核心的区别是数据会不停变革,所以数组的排序会打扣头。
当然也可以调整为对应的插入排序等算法。
常见算法
暴力
2)借助 Hash
排序+二分
4)双指针==》针对有序数组
在这个场景里面,最简单好用的应该是 HashMap 的方式
实现
class TwoSum {
private Map<Integer, Integer> cnt = new HashMap<>();
public TwoSum() {
}
public void add(int number) {
cnt.merge(number, 1, Integer::sum);
}
public boolean find(int value) {
for (var e : cnt.entrySet()) {
int x = e.getKey(), v = e.getValue();
int y = value - x;
if (cnt.containsKey(y) && (x != y || v > 1)) {
return true;
}
}
return false;
}
}
/**
* Your TwoSum object will be instantiated and called as such:
* TwoSum obj = new TwoSum();
* obj.add(number);
* boolean param_2 = obj.find(value);
*/
复制代码
小结
我们把握了核心的思路,不同的场景只需要举行相关的调整就行。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4