码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 位运算技巧及leetcode相关例题Java实现


    目录

    一、异或运算符的运用&&leetcode136

    异或运算符 a ^ b ^ b = a

    leetcode136

    二、n & (n - 1)&&leetcode133

    n & (n - 1):消除n最右边的一个1

    leetcode133/剑指offer15

    三、m的n次方(n是正整数)

    常规写法

    二进制的快速幂算法


    一、异或运算符的运用&&leetcode136

    异或运算符 a ^ b ^ b = a

    1)两个数相同,异或的结果为0。

    2)任何数和0异或结果都等于它本身。

    3)异或支持交换律。

    leetcode136

    1. //把所有的数异或,两个相同的元素就会被消掉
    2. class Solution {
    3. public int singleNumber(int[] nums) {
    4. int res = 0;
    5. for(int i = 0; i < nums.length; i++){
    6. res = res ^ nums[i];
    7. }
    8. return res;
    9. }
    10. }

    二、n & (n - 1)&&leetcode133

    n & (n - 1):消除n最右边的一个1

    n = 10100

    n & (n - 1) = 10000   

    原理是借位: 10100 - 1 = 10011     10100 & 10011 = 10000

    leetcode133/剑指offer15

    1. public class Solution {
    2. // you need to treat n as an unsigned value
    3. public int hammingWeight(int n) {
    4. int sum = 0;
    5. while(n != 0){
    6. n = n & (n - 1);
    7. sum++;
    8. }
    9. return sum;
    10. }
    11. }

    三、m的n次方(n是正整数)

    常规循环写法

     

    二进制的快速幂算法

    假设n = 13 = 1101 = 1 + 4 + 8

    那么 m ^ 13 = m^1 * m^4 * m^8 = m ^ 1 * m^100 * m^1000

    判断二进制有多少个1。这是快速幂算法来计算幂。它的基本思想是将指数n分解为若干个二进制位,然后根据每一位的值来决定是否将当前的底数m乘到结果中。具体来说,如果n的二进制表示的最后一位是1,则将m乘到结果中;然后将m平方,以便在下一次循环中进行计算。最后,通过不断地将n右移一位(即除以2),直到n变为0为止。最终返回的结果就是m的n次方。

    1. //n是正整数
    2. int pow(int m, int n) {
    3. int sum = 1; // 初始化结果为1
    4. int tmp = m; // 将m的值赋给临时变量tmp
    5. while (n != 0) {
    6. if (n & 1 == 1) {
    7. sum *= tmp; // 如果n的二进制表示的最后一位是1,则将tmp乘到sum上
    8. }
    9. tmp *= tmp; // 将tmp平方,以便在下一次循环中进行计算
    10. n = n >> 1; // 将n右移一位,相当于除以2
    11. }
    12. return sum; // 返回最终的结果
    13. }
  • 相关阅读:
    禁用adb install 安装app功能
    oracle学习48-oracle命令窗口执行sql语句
    Ubuntu 命令行教程介绍
    JUC-管程
    windows逆向的工具 (没有Android工具)
    多方位解析 C 端、B 端产品特性
    ubuntu篇---ubuntu安装mysql教程
    Pyinstaller 打包exe后,打开出现can‘t find package tkdnd 报错
    【稳定性】稳定性建设之弹性设计
    并行处理系统
  • 原文地址:https://blog.csdn.net/xiaoliii0401/article/details/134535503
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号