当前位置: 首页 > news >正文

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

目录

  • 专题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 := 0for i:=0; i<32; i++ {count += int((num >> i) & 1)}return count   
}

或者

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

题目:颠倒二进制位

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

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

Go代码

func reverseBits(num uint32) uint32 {var ret uint32for i,j:=0,31; i<32 && j>=0; i,j=i+1,j-1 {v := num >> i & 1ret = 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 := 0for min != 0{//位为1时才更新到ret,否则max一直更新if min & 1 == 1 {ret += max}min = min >> 1  //min除以2max = 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
}

相关文章:

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

目录 专题1&#xff1a;位移的妙用题目&#xff1a;位1的个数&#xff08;也被称为汉明重量&#xff09;解法1&#xff1a;遍历所有位&#xff0c;判断每个位的数字是否是1Go代码 解法2&#xff1a;依次消除每个1的位 numnum&(num-1)Go代码 题目&#xff1a;比特位计数思路…...

Swift 基础

工程目录 请点击下面工程名称&#xff0c;跳转到代码的仓库页面&#xff0c;将工程 下载下来 Demo Code 里有详细的注释 点击下载代码&#xff1a;swift-01...

IDEA的常用设置,让你更快速的编程

一、前言 在使用JetBrains的IntelliJ IDEA进行软件开发时&#xff0c;了解和正确配置一些常用设置是非常重要的。IDEA的强大功能和定制性使得开发过程更加高效和舒适。 在本文中&#xff0c;我们将介绍一些常用的IDEA设置&#xff0c;帮助您更好地利用IDEA进行开发。这些设置包…...

docker 镜像的导出与导入 save 与 load

一、镜像导出 docker save 导出 将系统中的镜像保存为压缩包&#xff0c;进行文件传输。使用 docker save --help 查看命令各参数&#xff0c;或者去docker官网查看.以 hello-world镜像为例。 A&#xff1a;将镜像保存为tar包 docker save image > package.tar docker sa…...

WPF显示初始界面--SplashScreen

WPF显示初始界面–SplashScreen 前言 WPF应用程序的运行速度快&#xff0c;但并不能在瞬间启动。当第一次启动应用程序时&#xff0c;会有一些延迟&#xff0c;因为公共语言运行时&#xff08;CLR&#xff09;首先需要初始化.NET环境&#xff0c;然后启动应用程序。 对于WPF中…...

08- AD/DA模/数转换

AD/DA模/数转换 8、AD/DA模/数转换8.1 AD转换注意 示例8.2 DA转换DAC转换原理&#xff1a; 8.3 PWM的DAC 8、AD/DA模/数转换 8.1 AD转换 通道引脚对照表&#xff1a; ADC的引脚&#xff1a; 规则通道和注入通道&#xff1a; 各个通道可以在单次、连续、扫描或者间断模式里…...

DTC服务(0x14 0x19 0x85)

DTC相关的服务有ReadDTCInformation (19) service&#xff0c;ControlDTCSetting (85) service和ReadDTCInformation (19) service ReadDTCInformation (19) service 该服务允许客户端从车辆内任意一台服务器或一组服务器中读取驻留在服务器中的诊断故障代码( DTC )信息的状态…...

【国护攻防场景下的沙箱技术对比】

目录 前言 沙箱技术分析 总结 前言 真高兴呀&#xff0c;又是受到红队大佬青睐的一天&#xff0c;今天下午很荣幸的收到了来自红队大佬的恶意投喂&#xff0c;把我们各位在座100年工作经验的蓝队师傅们吓得赶忙拔掉自己的电脑电源&#xff0c;断掉自己的网线&#xff0c;…...

springboot综合案例第三课

SpringSecurity入门 什么是SpringSecurity Spring Security 的前身是 Acegi Security &#xff0c;是 Spring 项目组中用来提供安全认证服务的框架。 (https://projects.spring.io/spring-security/) Spring Security 为基于J2EE企业应用软件提供了全面安全服务。特别 是使…...

面试经典150题——罗马数字转整数

罗马数字包含以下七种字符: I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如&#x…...

第三篇|金融人数据来源有哪些

数据对于金融行业真的很重要&#xff0c;那么金融人有哪些途径查数据呢&#xff1f; 国内&#xff1a; 1. 国家统计局 这个应该是无论什么行业都使用最频繁的网站&#xff0c;每个月都会固定发上个月资产投资数据 、工业增加值和利润数据等常规数据&#xff0c;其他数据也会…...

爬虫逆向实战(二)--某某观察城市排行榜

一、数据接口分析 主页地址&#xff1a;某某观察 1、抓包 通过抓包可以发现数据接口是multi 2、判断是否有加密参数 请求参数是否加密&#xff1f; 无请求头是否加密&#xff1f; 无cookie是否加密&#xff1f; 无响应数据是否加密&#xff1f; 通过查看“响应”板块可以…...

Grafana Prometheus 通过JMX监控kafka 【2023最新方式】

第三方kafka exporter方案 目前网上关于使用Prometheus 监控kafka的大部分资料都是使用一个第三方的 kafka exporter&#xff0c;他的原理大概就是启动一个kafka客户端&#xff0c;获取kafka服务器的信息&#xff0c;然后提供一些metric接口供Prometheus使用&#xff0c;随意它…...

发布游戏,进行打包。(Unity)

做到这里&#xff0c;我们的项目基本功能已经完成了&#xff0c;如果你还想使项目功能更加完善&#xff0c;可以自己思考如何补充&#xff0c;充分发挥并进行优化使效果达到更加美好。 首先呢&#xff0c;我们这里是说打包Window电脑游戏&#xff0c;我们直接点击菜单栏文件-&…...

我的C++待办事项

2023年8月17日 内存管理部分 学习智能指针 写一篇关于怎么在Linux中安装和使用vclgrind的博客&#xff08;2023年8月17日下午完成&#xff09; 拍一个关于在Linux中安装和使用vclgrind的视频 在Windows上怎么检测内存泄漏 怎么使用Address Sanitizer 在Linux上如何使用gc…...

浙大数据结构第七周之Saving James Bond - Hard Version

题目详情&#xff1a; This time let us consider the situation in the movie "Live and Let Die" in which James Bond, the worlds most famous spy, was captured by a group of drug dealers. He was sent to a small piece of land at the center of a lake f…...

线程同步条件变量

为何要线程同步 在线程互斥中外面解决了多线程访问共享资源所会造成的问题。 这篇文章主要是解决当多线程互斥后引发的新的问题&#xff1a;线程饥饿的问题。 什么是线程饥饿&#xff1f;互斥导致了多线程对临界区访问只能改变为串行&#xff0c;这样访问临界资源的代码只能…...

jeecgboot-vue3 查询区 label 文字居左实现

以系统管理中的系统角色界面为例 操作步骤 1. 通过路由或者工具找到当前代码所在的文件 src/views/system/role/index.vue 2. 找到 useListPage 调用&#xff0c;fromConfig 对象加入 labelWidth 和 rowProps 属性 formConfig: {labelWidth: 65, // 设置所有的label宽rowPr…...

CentOS系统环境搭建(五)——Centos7安装maven

centos系统环境搭建专栏&#x1f517;点击跳转 Centos7安装maven 下载压缩包 maven下载官网 解压 压缩包放置到/usr/local tar -xvf apache-maven-3.9.2-bin.tar.gz配置环境变量 vim /etc/profile在最下面追加 MAVEN_HOME/usr/local/apache-maven-3.9.2 export PATH${MAV…...

.eslintrc配置

ESLint 标准规则 /*** AlloyTeam ESLint 规则** 包含所有 ESLint 规则* 使用 babel-eslint 作为解析器** fixable 表示此配置支持 --fix* off 表示此配置被关闭了&#xff0c;并且后面说明了关闭的原因*/module.exports {parser: babel-eslint,parserOptions: {ecmaVersion: 2…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

BLEU评分:机器翻译质量评估的黄金标准

BLEU评分&#xff1a;机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域&#xff0c;衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标&#xff0c;自2002年由IBM的Kishore Papineni等人提出以来&#xff0c;…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)

前言&#xff1a; 双亲委派机制对于面试这块来说非常重要&#xff0c;在实际开发中也是经常遇见需要打破双亲委派的需求&#xff0c;今天我们一起来探索一下什么是双亲委派机制&#xff0c;在此之前我们先介绍一下类的加载器。 目录 ​编辑 前言&#xff1a; 类加载器 1. …...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制

目录 节点的功能承载层&#xff08;GATT/Adv&#xff09;局限性&#xff1a; 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能&#xff0c;如 Configuration …...