题目分析
题目一看就是位运算来求解,小伙伴们看一看能找到什么规律。
位运算
这个题目可以看成两个问题,一个是找到比它大的最小的数,一个是比它小的最大的数。
因此这个问题变成了找第一个1后面出现的第一个0和第一个0后面出现的第一个1。
算法的**时间复杂度为$O(log(n))$,空间复杂度为$O(1)$**。
1 | #include<iostream> |
刷题总结
这个题目是一个难度较大的位运算,其中不仅仅包含了位运算的知识,还牵扯了许多数学的知识进去,而且还用到了一些贪心的思想,小伙伴们遇到这样的题目,可以先找一找规律,举两个例子,这样解题思路可能就会冒出来了。