首页 > 技术文章 > *[hackerrank]Maximizing XOR

lautsie 2014-08-16 01:24 原文

https://www.hackerrank.com/contests/w1/challenges/maximizing-xor/

找了半天规律,答案竟然是暴力,伤感。我找到的方法是利用规律2^x XOR 2^x - 1会最大,感觉稍微效率高点。

int maxXor(int l, int r) {
	if (l == r)
		return 0;
	int p = 1;
	for (int i = 0; i <= 10; i++) {
		if (p * 2 > r)
			break;
		p *= 2;
	}
	if (p - 1 >= l)
		return (p - 1) ^ p;
	else
		return maxXor(l - p, r - p);
}

但事实上有个O(1)的方法:https://www.hackerrank.com/challenges/maximizing-xor/forum/questions/5407   @UlyssesB

2^((L XOR R).bit_length) - 1

其实和我的方法类似,但更高效。就是找出L和R最左边第一个不同的bit,那么之后的部分,肯定有个从类似7=>8 的过程,必然能得到15。

推荐阅读