#include <iostream>
#include <unordered_set>
using namespace std;
int n,m;
int main () {
cin>>n>>m;
unordered_set<int> hash;
int v1 = 1100, v2;
for(int i=0; i<n; i++) {
int a,b;
cin>>a;
b = m - a;
if(hash.count(b)) {
if(a > b) swap(a,b);
if(a < v1) v1 = a, v2 = b;
}
hash.insert(a);
}
if(v1 == 1100) cout<<"No Solution";
else cout<<v1<<' '<<v2;
return 0;
}
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e5 + 10;
int n,m,a[N];
int main () {
cin>>n>>m;
for(int i=0; i<n; i++) cin>>a[i];
sort(a,a+n);
int i = 0, j = n-1;
while (i < j) {
while(i<j && a[i]+a[j] > m) j--;
while(i<j && a[i]+a[j] < m) i++;
if(a[i] + a[j] == m) break;
}
if(i!=j) cout<<a[i]<<' '<<a[j];
else cout<<"No Solution";
return 0;
}
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e5 + 10;
int n,m,a[N];
bool find(int x, int l, int r) {
while (l<r) {
int mid = l+r>>1;
if(a[mid] < x) l=mid+1;
else r = mid;
}
if(a[l] == x) {
cout<<m-x<<" "<<x;
return true;
}
return false;
}
int main () {
cin>>n>>m;
for(int i=0; i<n; i++) cin>>a[i];
sort(a,a+n);
bool flag = false;
for(int i=0; i<n; i++) {
int x = m-a[i];
if(x < a[i]) break;
if(find(x,i+1,n-1)) {
flag = true;
break;
}
}
if(!flag) cout<<"No Solution";
return 0;
}
与用unordered_map 有什么区别?
第一个用hash表
第二个用双指针
第三个用二分
unodered_map我不了解
y总视频用的是unodered_set