所以这是我编写的一种方法,用于确定数组的给定索引是表示堆的最大级别还是最小级别,其中最小级别具有偶数深度(包括 0),最大级别具有奇数深度。它工作正常,但它的运行时间是(我认为)O(log N)。是否有更有效的方法来执行此操作,例如具有恒定运行时间的简单数学计算?请注意,此方法假定数据从数组的索引 1 开始,而不是索引 0。
private boolean isMaxLevel(int i)
{
int border = 1;
int prev = 1;
int count = 1;
boolean isMax = false;
// alternates boolean between true and false as each level is checked.
while (true)
{
if (i >= prev && i <= border)
return isMax;
isMax = !isMax;
prev = border + 1;
count *= 2;
border += count;
}
}