题目
设计并实现一个 TwoSum 类。他需要支持以下操作:add 和 find。
add -把这个数添加到内部的数据结构。
find -是否存在任意一对数字之和等于这个值
每次操作的数的绝对值小于 10^6
样例
样例 1:
add(1);add(3);add(5);
find(4)//返回true
find(7)//返回false
分析
这道题是一道设计类的题
我们先来想最简单的想法
1.顺序表
add()函数,添加时直接放在尾部
时间复杂度O(1)
find()函数,查找时直接两两对比,查看是否能组合出来
时间复杂度O(n^2)
这个n^2 复杂度可以说是非常高了,我们想一下怎么来改进,如果是一个有序的数组,我们就可以利用双指针来做这道题
add()函数,每次添加的时候做一次插入排序
时间复杂度O(n)
思考一下我们可以利用二分查找,找到能插入的位置,这样是不是就会降为logn的时间复杂度了,