计算差为K的数对的总数

Count the total pairs of numbers that have a difference of K

本文关键字:计算      更新时间:2023-10-16

我是这样解决这个问题的:

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> 0, N为元素个数。

有没有人看到这个代码有什么问题,我已经把这个提交给一个编程难题比赛,机器人说几个测试用例失败了,我想知道这个代码可能会失败的测试用例。

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

您的代码有两个问题。首先,需要去掉ifelse break;部分,以避免过早地退出for循环。其次,在最后一次迭代时,在循环结束时运行一个。你的循环终止条件应该是i < N - 1

然而,由于项目是排序的,似乎有可能有一个线性复杂性算法,你可以使用,类似于一个集合交叉算法,你走两个索引独立,做检查。