Codility -- Number-of-disc-intersections

来源:互联网 发布:淘宝几天自动确认收货 编辑:程序博客网 时间:2024/06/01 08:27

自己的算法是将区间按照start排序,依次看排序后的每个节点,在之后结点的start序列中二分查找当前结点end点的位置,位置差之和即可。

但是下面的算法更简单。

http://blog.csdn.net/caopengcs/article/details/9327069

// you can also use includes, for example:// #include <algorithm>#include <algorithm>using namespace std;int solution(const vector<int> &A) {    // write your code here...    int n = A.size(), m = n << 1, i, r, d;    vector<pair<long long, int> > a;    a.resize(m);    for (i = m = 0; i < n; ++i) {        a[m++] = make_pair(((long long) i) - A[i], -1);        a[m++] = make_pair(((long long) i) + A[i], 1);    }    sort(a.begin(), a.end());    for (i = r = d = 0; i < m; ++i) {        if (a[i].second < 0) {            if ((r += d++) > 10000000) {                return -1;            }        }        else {            --d;        }    }    return r;                          }


原创粉丝点击