给定一个已经排序的整数数组(非递减顺序),我们需要找到大于给定键的最小数字的索引,我写了两个函数,它们是相同的除了返回线。
lo 和hi 指定低位和高位的索引,包括在内
int minimum_index_greater(int *a, int lo, int hi, int key) {
int left = lo - 1;
int right = hi + 1;
while (left + 1 < right) {
int mid = (left + right) / 2;
if (a[mid] > key) right = mid;
else left = mid;
}
return right; -------> function 1
return left + 1; -------> function 2
}
第一个问题是它们是否正确(返回正确的值)?
第二个问题是,我假设在这种情况下两个函数是相同的,它们在每种情况下都返回相同的值。我很确定这一点。我对不对?请解释。
P/S : 当我在 Sphere Online Judge 上解决问题时.我需要找到这个值并解决问题,使用函数 1,我得到 97.72/100 分(我不知道为什么它不是 100),使用函数 2,我只得到 94.44。所以我猜问题出在这里
最佳答案
查看 upper_bound功能。它完全符合您的要求(简单的二进制搜索)。 Here你有一个很棒的教程。
关于arrays - 查找大于排序数组给定键的最小数的索引,这两个函数返回相同的结果吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32054042/