今天突然想起interviewstreet这个网站,这个网站和其他oj有些不同,每题只要通过一组测试样例就会获得一定的分数,然后按分数的高低进行排名,刚刚看到一题。
链接 https://www.hackerrank.com/challenges/pairs
题意大概是输入n和k,然后是n个数每个数在10^9范围内,计算出有多少对a[i]和a[j]使得a[i]+k = a[j]。
#include <iostream> #include <algorithm> using namespace std; int main() { int N, K; cin >> N >> K; long long *key = new long long[N]; for (int i = 0; i < N; i++) { cin >> key[i]; } sort (key, key+N); //对数组进行排序 int k = 0; for (int i = 0; i < N; i++) { int begin = i+1; int end = N-1; int value = key[i] + K; while(begin <= end) //用二分查找有没有满足条件的 { int mid = (begin+end)/2; if (key[mid] < value) begin = mid + 1; else if (key[mid] > value) end = mid - 1; else { k++; break; } } } cout << k << endl; }