我正在用Java编写虚拟内存分配管理器。我在 n 条目上有一个布尔数组,需要在一行中找到一行 k 个虚假条目。除了进行大规模的二元搜索并计算每一个谬误之外,还有一个很好的方法来计算 k falses,获得该行的起始索引。
谢谢!
答案 0 :(得分:1)
如果k
占n
的很大一部分,那么最简单的效率衡量标准就是在每次搜索中跳过k
项。
int searchForFalses(boolean[] array, int k) {
for (int n = 0; n < array.length; n += k) {
if (!array[n])) {
int start = n;
while (start >= 0 && !array[start])
start--;
int end = n;
while (end < array.length && !array[end])
if (end - start >= k)
return start;
else
end++;
}
}
return -1;
}