以下是我如何解决这个问题:
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;
}
}
input
有integer
个值,保证为unique
和> 0
,N
是元素的数量。
有没有人看到这个代码有什么问题,我已将此提交给一个编程益智竞赛,机器人说几个测试用例都失败了,我想知道这个代码可能失败的测试用例。
答案 0 :(得分:2)
我不确定我是否正确理解了代码,但在我看来,如果数组input[0] + K
中不存在值为input
的数字,则您的循环将终止那个break
。我认为这就是问题所在。
答案 1 :(得分:1)
您的代码存在两个问题。首先,else break;
的{{1}}部分需要消失以避免过早退出if
循环。其次,在最后一次迭代中,在循环结束时运行一个。您的循环终止条件应为for
。
然而,由于项目已经排序,因此您可以使用线性复杂度算法,类似于集合交叉算法,您可以独立地执行两个索引,进行检查。