计算具有差异K的总数字对

时间:2011-12-28 18:20:40

标签: c++ algorithm

以下是我如何解决这个问题:

void solve ( int *input, int N, int K, int& count) {
    std::sort ( input, input + N);
    for ( int i = 0; i < N; i++) {
        int find_me  = input[i] + K;
        if (std::binary_search (input + i + 1, input + N, find_me )) 
            count++;        
        else
            break;
    }
}

inputinteger个值,保证为unique> 0N是元素的数量。

有没有人看到这个代码有什么问题,我已将此提交给一个编程益智竞赛,机器人说几个测试用例都失败了,我想知道这个代码可能失败的测试用例。

2 个答案:

答案 0 :(得分:2)

我不确定我是否正确理解了代码,但在我看来,如果数组input[0] + K中不存在值为input的数字,则您的循环将终止那个break。我认为这就是问题所在。

答案 1 :(得分:1)

您的代码存在两个问题。首先,else break;的{​​{1}}部分需要消失以避免过早退出if循环。其次,在最后一次迭代中,在循环结束时运行一个。您的循环终止条件应为for

然而,由于项目已经排序,因此您可以使用线性复杂度算法,类似于集合交叉算法,您可以独立地执行两个索引,进行检查。