设计一个接收整数流的数据结构,该数据结构支持检查是否存在两数之和等于特定值。
实现 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
我的解:
这道题比较简单,插入数据和查找数据。
class TwoSum {
public:
TwoSum() {
}
void add(int number) {
int i;
for (i = 0; i < nums.size(); i++) {
if (number <= nums[i]) {
break;
}
}
nums.insert(nums.begin() + i, number);
}
bool find(int value) {
int low = 0;
int high = nums.size() - 1;
while (low < high) { // cannot have equal, since need two unique numbers for the sum
auto sum = nums[low] +nums[high];
if (sum == value) {
return true;
} else if (sum > value) {
high--;
} else {
low++;
}
}
return false;
}
private:
vector<int> nums;
};