[Go版]算法通关村第十一关白银——位运算的高频算法题

news2024/11/15 20:06:30

目录

  • 专题1:位移的妙用
    • 题目:位1的个数(也被称为汉明重量)
      • 解法1:遍历所有位,判断每个位的数字是否是1
        • Go代码
      • 解法2:依次消除每个1的位 num=num&(num-1)
        • Go代码
    • 题目:比特位计数
      • 思路分析:遍历每个数,使用上面的位1的个数计算即可
      • Go代码
    • 题目:颠倒二进制位
      • 思路分析:获得低位的数值,左移到高位去
      • Go代码
  • 专题2:位实现加减乘除
    • 题目:两整数之和
      • 思路分析:a&b<<1得进位,a^b得非进位
      • Go代码
    • 题目:递归乘法
      • 思路分析:循环 + 位移
      • Go代码

专题1:位移的妙用

题目:位1的个数(也被称为汉明重量)

题目链接:LeetCode-191. 位1的个数
在这里插入图片描述

解法1:遍历所有位,判断每个位的数字是否是1

Go代码

func hammingWeight(num uint32) int {
    count := 0
    for i:=0; i<32; i++ {
        count += int((num >> i) & 1)
    }
    return count   
}

或者

func hammingWeight(num uint32) int {
    count := 0
    for i:=0; i<32; i++ {
        if num & (1 << i) != 0 {
            count++
        }
    }
    return count   
}

解法2:依次消除每个1的位 num=num&(num-1)

Go代码

func hammingWeight(num uint32) int {
    count := 0
    for num != 0 {
        // 除了最后1个1在&之后被去掉了,前面的&之后 1还是1 0还是0
        num = num & (num-1)
        count++
    }
    return count
}

题目:比特位计数

题目链接:LeetCode-338. 比特位计数
在这里插入图片描述

思路分析:遍历每个数,使用上面的位1的个数计算即可

Go代码

func countBits(n int) []int {
    ret := make([]int, 0)
    for i:=0;i<=n;i++ {
        ret = append(ret, hammingWeight(i))
    }
    return ret
}

func hammingWeight(n int) int {
    count := 0
    for n != 0 {
        n = n & (n-1)
        count++
    }
    return count
}

题目:颠倒二进制位

题目链接:LeetCode-190. 颠倒二进制位
在这里插入图片描述

思路分析:获得低位的数值,左移到高位去

Go代码

func reverseBits(num uint32) uint32 {
    var ret uint32
    for i,j:=0,31; i<32 && j>=0; i,j=i+1,j-1 {
        v := num >> i & 1
        ret = ret | (v<<j)
    }
    return ret
}

专题2:位实现加减乘除

题目:两整数之和

题目链接:LeetCode-371. 两整数之和
在这里插入图片描述

思路分析:a&b<<1得进位,a^b得非进位

Go代码

func getSum(a int, b int) int {
    for b!= 0 {
        carry := (a & b)<<1 //计算进位
        a = a ^ b  //计算非进位部分的和
        b = carry   //更新 b 为进位
    }
    return a
}

题目:递归乘法

题目链接:LeetCode-面试题 08.05. 递归乘法
在这里插入图片描述

思路分析:循环 + 位移

在循环中不断将其中一个数加倍(左移),然后根据另一个数的每一位是否为1,来决定是否将加倍后的数累加到最终的结果中。

Go代码

func multiply(A int, B int) int {
    min := getMin(A, B)
    max := getMax(A, B)
    ret := 0
    for min != 0{
    	//位为1时才更新到ret,否则max一直更新
        if min & 1 == 1 {
            ret += max
        }
        min = min >> 1  //min除以2
        max = max << 1  //max乘以2
    }
    return ret
}
func getMin(a int, b int) int {
    if a >= b {
        return b
    }
    return a
}
func getMax(a int, b int) int {
    if a >= b {
        return a
    }
    return b
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/887779.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

春秋云镜 CVE-2020-21650

春秋云镜 CVE-2020-21650 MyuCMS后台rce 靶标介绍 MyuCMS开源内容管理系统,采用ThinkPHP开发而成的社区商城聚合&#xff0c;插件&#xff0c;模板&#xff0c;轻便快捷容易扩展 其2.2版本中admin.php/config/add方法存在任意命令执行漏洞。 启动场景 漏洞利用 exp /index…

以安全促发展——《数据出境安全评估办法》解读

各国关于数据出境的监管要求一直是各国数据监管的风向标&#xff0c;不仅体现国家对于数据安全的重视程度&#xff0c;也能意会出国家对于数据竞争的态度以及数字经济发展的思路。例如欧盟《通用数据保护条例》&#xff08;GDPR&#xff09;设定的个人数据出境的限制&#xff0…

conda常用命令及国内镜像源

conda命令使用介绍 启动conda source ~/.bashrc帮助目录 conda create -h检查conda版本 conda --version升级当前版本的conda conda update conda环境管理 列出所有的环境 conda info -e conda env list安装一个不同版本的python新环境 conda create --name py27 pytho…

有一种新型病毒在 3Ds Max 环境中传播,如何避免?

3ds Max渲染慢&#xff0c;可以使用渲云渲染农场&#xff1a; 渲云渲染农场解决本地渲染慢、电脑配置不足、紧急项目渲染等问题&#xff0c;可批量渲染&#xff0c;批量出结果&#xff0c;速度快&#xff0c;效率高。 此外3dmax支持的CG MAGIC插件专业版正式上线&#xff0c;…

网络通信原理数据链路层数制转换(第四十一课)

数制概述 数制是表示和计算数值的一种方式,不同的数制使用不同的数字和规则来表示数值。最常见的数制是十进制(也称为阿拉伯数字),使用0-9个数字来表示数值。其他常见的数制包括二进制**(使用0和1表示数值)、八进制(使用0-7表示数值)和十六进制(使用0-9和A-F表示数值…

Linux_10_进程、系统性能和计划任务

目录 1 进程和内存管理1.1 什么是进程1.2 进程结构1.3 进程相关概念1.3.1 物理地址空间和虚拟地址空间1.3.2 用户和内核空间1.3.3 C代码和内存布局之间的对应关系1.3.4 进程使用内存问题1.3.4.1 内存泄漏: Memory Leak1.3.4.2 内存溢出: Memory Overflow1.3.4.3 内存不足: OOM …

docker tomcat时间少8小时问题解决

docker容器与系统时间一致并且正确&#xff0c;但是java程序在运行中通过log日志发现发了8小时 解决方法 修改docker容器中tomcat/bin/catalina.sh文件&#xff0c;添加一下内容 JAVA_OPTS"$JAVA_OPTS -Dfile.encodingUTF8 -Duser.timezoneGMT08" 附 操作命令 一…

ue5读取外部文件

准备环境 我的环境是win10&#xff0c;ue5.1.1&#xff0c;cpux86。 创建工程时&#xff0c;需要选择C模式 这样在Content Browser中会出现C Classes文件夹&#xff0c;下面有一个本项目命名的文件夹&#xff0c;鼠标右键可以看到New C Class选项。 新建类的时候选择父类Blue…

7-5 出租车计价

分数 15 全屏浏览题目 切换布局 作者 沈睿 单位 浙江大学 本题要求根据某城市普通出租车收费标准编写程序进行车费计算。具体标准如下&#xff1a; 起步里程为3公里&#xff0c;起步费10元&#xff1b;超起步里程后10公里内&#xff0c;每公里2元&#xff1b;超过10公里以上…

epoll监听多路IO(多路传感器数据高效处理)

知识点: epoll模型(使用成员ptr携带信息), udp(#pragma pack结构体对齐), socketcan(帧过滤), Linux多路uart232tousb列表获取, 正则匹配, ASCII乱码检测, C线程(lambda), 非阻塞读。 一、代码 #include <iostream> #include <stdlib.h> #include <string>…

jmeter errstr :“unsupported field type for multipart.FileHeader“

在使用jmeter测试接口的时候&#xff0c;提示errstr :"unsupported field type for multipart.FileHeader"如图所示 这是因为我们 在HTTP信息头管理加content-type参数有问题 直接在HTTP请求中&#xff0c;勾选&#xff1a; use multipart/form-data for POST【中文…

uniapp条形码实现

条形码在实际应用场景是经常可见的。 这里教大家如何集成uniapp条形码。条形码依赖类库JsBarcode. 下载JsBarcode源码&#xff0c;对CanvasRenderer进行了改进兼容uniapp。 import merge from "../help/merge.js"; import {calculateEncodingAttributes, getTotal…

POSTGRESQL 关于2023-08-14 数据库自动启动文章中使用KILL 来进行配置RELOAD的问题解释...

开头还是介绍一下群&#xff0c;如果感兴趣Polardb ,mongodb ,MySQL ,Postgresql ,redis &#xff0c;SQL SERVER ,ORACLE,Oceanbase 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请加 liuaustin3微信号 &…

Text-to-SQL小白入门(二)——Transformer学习

摘要 本文主要针对NLP任务中经典的Transformer模型的来源、用途、网络结构进行了详细描述&#xff0c;对后续NLP研究、注意力机制理解、大模型研究有一定帮助。 1. 引言 在上一篇《Text-to-SQL小白入门&#xff08;一&#xff09;》中&#xff0c;我们介绍了Text-to-SQL研究…

Java版电子招投标管理系统源码-电子招投标认证服务平台-权威认证 tbms

​ 功能描述 1、门户管理&#xff1a;所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含&#xff1a;招标公告、非招标公告、系统通知、政策法规。 2、立项管理&#xff1a;企业用户可对需要采购的项目进行立项申请&#xff0c;并提交审批&#xff0c;…

【mysql】—— 表的增删改查

目录 序言 &#xff08;一&#xff09;Create操作 1、单行数据 全列插入 2、多行数据 指定列插入 3、插入否则更新 4、直接替换 &#xff08;二&#xff09;Retrieve操作 1、SELECT 列 1️⃣全列查询 2️⃣指定列查询 3️⃣查询字段为表达式 4️⃣为查询结果指定…

无涯教程-Perl - sprintf函数

描述 此函数使用FORMAT基于LIST中的值返回格式化的字符串。本质上与printf相同,但是返回格式化的字符串而不是将其打印。 语法 以下是此函数的简单语法- sprintf FORMAT, LIST返回值 此函数返回SCALAR(格式化的文本字符串)。 例 以下是显示其基本用法的示例代码- #!/us…

SQL Injection

SQL Injection 就是通过把恶意的sql命令插入web表单递交给服务器&#xff0c;或者输入域名或页面请求的查询字符串递交到服务器&#xff0c;达到欺骗服务器&#xff0c;让服务器执行这些恶意的sql命令&#xff0c;从而让攻击者&#xff0c;可以绕过一些机制&#xff0c;达到直…

【Android Studio】 win11 安装配置 jdk17 超详细

概述 一个好的安装教程能够帮助开发者完成更便捷、更快速的开发。书山有路勤为径&#xff0c;学海无涯苦作舟。我是秋知叶i、期望每一个阅读了我的文章的开发者都能够有所成长。 一、下载JDK JDK官网 这里下载 JDK17 windows x64 installer 二、安装JDK 双击打开下载的 j…

计算机毕设项目之基于django+mysql的疫情实时监控大屏系统(前后全分离)

系统阐述的是一款新冠肺炎疫情实时监控系统的设计与实现&#xff0c;对于Python、B/S结构、MySql进行了较为深入的学习与应用。主要针对系统的设计&#xff0c;描述&#xff0c;实现和分析与测试方面来表明开发的过程。开发中使用了 django框架和MySql数据库技术搭建系统的整体…