题意:略
思路:two pointers思想,简单
先对数字序列进行排序,然后定义两个指针left和right,初始状态low=0,high=n-1。当a[low]+a[high] > M时,high向左移动;当a[low]+a[high] < M时,left向右移动。
代码:
#include <cstdio> #include <algorithm> using namespace std; const int N=100005; int value[N]; int main() { int n,m; scanf("%d%d",&n,&m); for(int i=0;i<n;i++) scanf("%d",&value[i]); sort(value,value+n); int low=0,high=n-1; while(low<high){ if(value[low]+value[high]==m) break; else if(value[low]+value[high]>m) high--; else low++; } if(low==high) printf("No Solution\n"); else printf("%d %d\n",value[low],value[high]); return 0; }