two pointers问题,所有硬币先排个序,然后从前往后和从后往前找,O(N)
#include <iostream>
#include <algorithm>
using namespace std;
int coins[100010];
int main(){
int n,m;
scanf("%d %d",&n,&m);
for(int i = 0;i < n;i++){
scanf("%d",&coins[i]);
}
sort(coins,coins+n);
int i = 0,j = n - 1;
bool findSolu = false;
while(!findSolu){
if(i == j)
break;
if(coins[i] + coins[j] > m){
j--;
}else if(coins[i] + coins[j] < m){
i++;
}else{
findSolu = true;
}
}
if(findSolu == false){
printf("No Solution");
}else{
printf("%d %d",coins[i],coins[j]);
}
system("pause");
return 0;
}