public static int 最近公共先祖(int x, int y) {
if (x == 0 || y == 0) return 0;
int flags;
for (flags = 1; (x & flags) != x && (y & flags) != y; flags <<= 1, flags++);
while ((x & flags) != x) x >>= 1;
while ((y & flags) != y) y >>= 1;
for (; x != y; x >>>= 1, y >>>= 1);
return x;
}
我感觉我写的这个算法效率是真的高。
打脸来得真快,跟答案相比我这个就是个屎。如下:
public static int 最近公共先祖(int x, int y) {
if (x <= 0 || y <= 0) {
throw new IllegalArgumentException("傳參必須是正數!");
}
while (x != y) {
if (x > y) {
x >>>= 1;
} else {
y >>>= 1;
}
}
return x;
}



