请给出一个运行时间为O(nlgn)的算法,使之能在给定一个由n个整数构成的集合S和另一个整数x时,判断出S中是否存在有两个其和等于x的元素。
总体思路使用nlgn的复杂度算法对数组进行排序。然后遍历数组的每一个元素e,使用lgn复杂度的算法查找x-e是否存在。对于c++,可以考虑使用STL库进行简化。需要考虑的问题是元素可能是重复的。比如2+2=4。这样我们可以使用multiset。代码如下:
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <string>
#include <sstream>
#include <math.h>
#include <string.h>
#include <algorithm>
#include <numeric>
#include <deque>
#include <climits>
#include <iomanip>
#include <unordered_map>
#include <iterator>
#include <list>
#include <chrono>
#include <unordered_set>
using namespace std;
int main() {
multiset<int> ms;
int n; cin >> n;
for (int i = 0; i < n; i++) {
int num; cin >> num;