贪心 + 位运算

题目描述

alt

首先,我们需要了解到的一点是,由于这个a序列是递增的,所以当我们的x取到每一位都是1时,所有a[i] & x 都保持不变,符合题意。

而我们需要找到一个最小的满足这个性质的x,由此我们引出贪心思路,即我们从最高位开始判断这一位是否要取1, 而在可以取0的情况下一定取0

而经过一些实验,我们还可以发现一些位运算的性质

即如果假设我们的答案xi 位数字(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

本人是算法新手,此题解来源于各个大佬发布的讨论或题解,我将自己的理解 写出来以便与我相同的新手观看。

如有谬误,请大家多多指出,探讨。 链接详细代码可参照