首页 > 其他分享 >位运算求解LeetCode--2 的幂

位运算求解LeetCode--2 的幂

时间:2024-12-01 14:05:41浏览次数:7  
标签:运算 多个 求解 -- 复杂度 int 右侧 LeetCode 本题

2的幂

https://leetcode.cn/problems/power-of-two/description/

思路

如果一个数是2的幂,那么该数的二进制表示形式一定是最高位为1,其余位为0,且最高位的1即为该数字全部

不可能有多个1的原因:若有多个1,且还是2的倍数,那这些1应该合并为更高位的1个1,而不是以多个1的形式出现,矛盾,所以不可能有多个1

代码

方法1:取最高位,和原数字比较,相等则是2的幂,不相等则不是

public static boolean isPowerOfTwo(int n){
    return n>0 && ((n&(-n))==n);
}

方法2:把最右侧的1(最高位的1)删掉,结果为0则是2的幂,不为0则不是

public static boolean isPowerOfTwo(int n){
    return n>0 && ((n&(n-1))==0);
}

复杂度

时间复杂度:O(1)

本题算法核心

本题解题时可能更容易想到循环、递归,但循环和递归的时间复杂度较高,使用位运算解决不仅代码简洁,而且时间复杂度大大降低。本题主要用到的知识点:

  1. 使用位运算获取最右侧的1:n&(-n)
  2. 使用位运算消除最右侧的1:n&(n-1)

标签:运算,多个,求解,--,复杂度,int,右侧,LeetCode,本题
From: https://blog.csdn.net/m0_73694177/article/details/144140592

相关文章

  • 位运算求解LeetCode--3的幂
    3的幂https://leetcode.cn/problems/power-of-three/description/思路方法1:如果一个数是3的幂,那么在int范围内,它一定是1162261467的因数(1162261467是int范围内3的最大幂,3的19次幂),所以只需判断该数字是否是1162261467的因数即可方法2:如果并不知道int范围内3的最大幂值,可以......
  • 位运算求解LeetCode--数字范围按位与
    数字范围按位与https://leetcode.cn/problems/bitwise-and-of-numbers-range/description/思路由题目给定数据量是,约规模,可知时间复杂度O(n)是过不了的,也就是说不能使用从left到right遍历的方法来解(规模以上的O(n)就过不了)方法1:遍历n次不行,那就减少循环次数,可以让left不动......
  • 位运算求解LeetCode--颠倒二进制位
    颠倒二进制位https://leetcode.cn/problems/reverse-bits/description/思路32位太长,以8位为例,给定字符串abcdefgh,求颠倒后的字符串hgfedcba第一步-一一交换1v1badcfehg第二步-两两交换2v2dcbahgfe第三步-四四交换4v4hgfedcba完成!使用位运算第一步-1v1ab......
  • 异或求解LeetCode--只出现一次的数字
    只出现一次的数字136.只出现一次的数字-力扣(LeetCode)思路根据异或的性质:0^n=n和n^n=0以及异或满足交换律和结合律可知,一个数组中偶数个相同数字异或的结果为0,奇数个相同数字异或的结果为该数字,所以要找出现奇数次的数字,只需求一下整个数组异或的结果即可代码classSo......
  • 【Java毕业设计】基于Springcloud+SpringBoot+Vue的智慧养老系统
    源码获取:https://download.csdn.net/download/u011832806/89426620基于Springcloud+SpringBoot+Vue的智慧养老系统开发语言:Java数据库:MySQL技术:Springcloud+SpringBoot+MyBatis+Vue.js+Eureka+elementUI工具:IDEA/Ecilpse、Navicat、Maven系统演示视频:链接:https://pan.b......
  • 洛谷P1880 [NOI1995] 石子合并 题解
    此题解以纪念我终于差不多大概搞懂区间dp了(插个存档点,到时候忘了再回来看看)。P1880[NOI1995]石子合并题解在做这道题之前,可以看看P1775石子合并(弱化版)(一道题解帮你搞定两道题,多划算)。P1775石子合并(弱化版)形式化的题面一堆石头摆在你面前,让你把他们扔到一起,每次扔......
  • springcloud组件openFeign
    openFeign是什么?1、openFeign是个声明式WebServer客户端,使用openFeign让编写WebService客户端更加简单2、它的使用方法是定义一个服务接口然后在上面添加注解3、openFeign也支持可拔插式的编码器和解码器4、SpringCloud对openFeign进行了封装使其支持了SpringMvc标准注解......
  • Seata事务隔离
    本文目标:帮助用户明白使用Seata AT模式时,该如何正确实现事务隔离,防止脏读脏写。希望读者在阅读本文前,已阅读过seata官网中对AT模式的介绍,并且对数据库本地锁有所了解(例如,两个事务同时在对同一条记录做update时,只有拿到recordlock的事务才能更新成功,另一个事务在recordloc......
  • Seata使用Apollo作为配置中心
    预备工作​当您将apollo-client整合到您的Seata工程之前,请确保后台已经启动Apollo服务。如果您尚且不熟悉Apollo的基本使用的话,可先行参考 Apollo快速入门。建议使用Apollo 1.6.0 及以上的版本。快速上手​Seata融合Apollo配置中心的操作步骤非常简单,大致步骤......
  • C++编程:通过简单实现理解CyberRT的DataVisitor和DataDispatcher
    文章目录0.引言1.定义DataVisitor接口2.实现DataDispatcher3.创建具体的DataVisitor4.类关系图5.测试示例6.编译和运行0.引言本文简单实现类似CyberRT的DataVisitor和DataDispatcher,使得数据能够被分发给多个订阅者(访客)。1.定义DataVisitor接......