贪心 + 位运算
题目描述
首先,我们需要了解到的一点是,由于这个a
序列是递增的,所以当我们的x
取到每一位都是1
时,所有a[i] & x
都保持不变,符合题意。
而我们需要找到一个最小的满足这个性质的x
,由此我们引出贪心思路,即我们从最高位开始判断这一位是否要取1
, 而在可以取0
的情况下一定取0
。
而经过一些实验,我们还可以发现一些位运算的性质
即如果假设我们的答案x
有 i
位数字(01序列),那么如果第i - 1
位取1
不能使得所有的a
序列满足 a[i] & x
递增, 那么我们从 0 - i - 1
位都取1
也无法使得a
序列满足这个性质。
换句话说,也就是此时必须要在第i
位·上取1
了。
因此我们只需要枚举一下此题的数据范围的位数i = 30; i >= 0; i --
, 再依次判断j = i - 1; j >= 0; j --
位上取1
是否可以满足性质,如果可以满足,则当前答案的第j
位就取1
,再去验证一遍, 如果真的符合,则将最终答案更新
如果不能满足则答案的第i
位取1
。
本人是算法新手,此题解来源于各个大佬发布的讨论或题解,我将自己的理解 写出来以便与我相同的新手观看。
如有谬误,请大家多多指出,探讨。 链接详细代码可参照