算法题目:Design and implement a TwoSum class. It should support the following operations: add and find.
add - Add the number to an internal data structure.
find - Find if there exists any pair of numbers which sum is equal to the value.
For example:
add(1); add(3); add(5);
find(4) -> true
find(7) -> false
大致意思:设计一个TwoSum类,使得类支持两个操作add和find。add函数代表向数据结构中添加一个数,而find功能是在所有数据中查找是否存在两个数使得这两个数的和等于给定的sum。
解题思路:利用unordered_map来保存数据,通过遍历所有数据来查找是否存在这样的两个数据使用之和为sum。
class TwoSum {
private:
unordered_map<int, int> buffer;
public:
void add(int number) {
buffer[number]++;
}
bool find(int value) {
for (auto elem : buffer){
int num1 = elem.second;
int num2 = value == (elem.first << 1) ? num1 - 1 : buffer.find(value - elem.first) != buffer.end();
if (num1 && num2){
return true;
}
}
return false;
}
};