常见の算法5
位图
一个int类型32字节,可以表示0-31这32个数出没出现过,出现过1没出现0,再扩大一点搞个数组,就可以表示0-1023出没出现过,一个long类型可储存64位
如何把10位组成的数,第四位由1改成零
package class05;import java.util.HashSet;public class Code01_BitMap1 {public static class BitMap {private long[] bits;public BitMap(int max) {bits = new long[(max + 64) >> 6];//右移6位就是÷64的意思} //要准备多少个long就是(max + 64) >> 6个public void add(int num) {//num÷64定位到是第几个整数,num%64定位到是第几个整数的第几位//而%64等价于&63(只保留n的后七位0-63,前面的&63后全为0)bits[num >> 6] |= (1L << (num & 63));//不能1左移32位,1默认是整形32位必须是1L}//删除public void delete(int num) {bits[num >> 6] &= ~(1L << (num & 63));//1左移这么些位然后取反,然后和n做与运算}//有没有某个数(这一位不是0就存在)public boolean contains(int num) {return (bits[num >> 6] & (1L << (num & 63))) != 0;}}//验证public static void main(String[] args) {System.out.println("测试开始!");int max = 10000;BitMap bitMap = new BitMap(max);//申请一个mapHashSet<Integer> set = new HashSet<>();//申请一个哈希set然后这俩作比较int testTime = 10000000;for (int i = 0; i < testTime; i++) {int num = (int) (Math.random() * (max + 1));double decide = Math.random();if (decide < 0.333) {bitMap.add(num);set.add(num);} else if (decide < 0.666) {bitMap.delete(num);set.remove(num);} else {if (bitMap.contains(num) != set.contains(num)) {System.out.println("Oops!");break;}}}for (int num = 0; num <= max; num++) {if (bitMap.contains(num) != set.contains(num)) {System.out.println("Oops!");}}System.out.println("测试结束!");}}
1.快速写出46的二进制形式46=32+14=32+8+4+2=101110
2,^异或运算等价于二进制无进位相加
3.a&b得到的结果<<1位得到进位信息
故a=46,b=20,c=两者无进位相加结果,d等于进位信息
c=0101110^0010100=0111010=58
d=a&b<<1=0000100<<1=0001000=8,c+d=66=a+b
但是违规了,本能用加号,所以要一直递归,直到进位信息为零
那a-b=add(a,add(~b+1)),a+(-b)
乘法
a*b,从右往左看b的二进制位,是1把a抄下来,是0不抄下来,a后面补一个零(左移1位),循环
除法
1.要用右移,左移会导致数据符号位改变
2.x右移i位,i=30.29...5,x<y说明第i位上要放0,x>>4,x>=y停,第四位 置1,然后当前的x-y即x-y<<4
3.如何回避掉系统最小值无法转成绝对值问题,举例假设系统最小值是-15我要计算-15/3
-15+1=-14,-14/3=-4,然后(-15)-(-4*3)计算差值得-3,然后-3/3得到-1把他和-4相加
a/b-> (a+1)/b=c ->a-(b*c)=d -> d/b=e ->c+e
package class05;// 测试链接:https://leetcode.com/problems/divide-two-integers
public class Code03_BitAddMinusMultiDiv {public static int add(int a, int b) {int sum = a;while (b != 0) {//无论如何不能用加号sum = a ^ b;//无进位相加信息b = (a & b) << 1;//进位信息b->b`a = sum;//a->a`,直到进位信息为零}return sum;}public static int negNum(int n) {return add(~n, 1);}public static int minus(int a, int b) {return add(a, negNum(b));}
//乘法public static int multi(int a, int b) {int res = 0;while (b != 0) {if ((b & 1) != 0) {//最末尾有1res = add(res, a);//接受此时的a}a <<= 1;//a后面补一个零b >>>= 1;//循环的步进条件}return res;}public static boolean isNeg(int n) {return n < 0;}public static int div(int a, int b) {int x = isNeg(a) ? negNum(a) : a;//先把ab设置成正数int y = isNeg(b) ? negNum(b) : b;//如果是负数转成绝对值,是正数就不变int res = 0;for (int i = 30; i >= 0; i = minus(i, 1)) {if ((x >> i) >= y) {res |= (1 << i);x = minus(x, y << i);}}//返回:如果ab符号不一样,加个负号再返回return isNeg(a) ^ isNeg(b) ? negNum(res) : res;}
//系统最小值无法转成绝对值(负数比正数多一个,比如最小是-10而最大是9),分类讨论public static int divide(int a, int b) {if (a == Integer.MIN_VALUE && b == Integer.MIN_VALUE) {return 1;} else if (b == Integer.MIN_VALUE) {return 0;} else if (a == Integer.MIN_VALUE) {if (b == negNum(1)) {//这个数不存在没有,约定俗成写最大值return Integer.MAX_VALUE;} else {int c = div(add(a, 1), b);return add(c, div(minus(a, multi(c, b)), b));}} else {return div(a, b);}}}
相关文章:

常见の算法5
位图 一个int类型32字节,可以表示0-31这32个数出没出现过,出现过1没出现0,再扩大一点搞个数组,就可以表示0-1023出没出现过,一个long类型可储存64位 如何把10位组成的数,第四位由1改成零 package class05…...

MYSQL中group by分组查询的用法详解(where和having的区别)!
文章目录 前言一、数据准备二、使用实例1.如何显示每个部门的平均工资和最高工资2.显示每个部门的每种岗位的平均工资和最低工资3.显示平均工资低于2000的部门和它的平均工资4.having 和 where 的区别5.SQL查询中各个关键字的执行先后顺序 前言 在前面的文章中,我们…...

架构篇25:高可用存储架构-双机架构
文章目录 主备复制主从复制双机切换主主复制小结存储高可用方案的本质都是通过将数据复制到多个存储设备,通过数据冗余的方式来实现高可用,其复杂性主要体现在如何应对复制延迟和中断导致的数据不一致问题。因此,对任何一个高可用存储方案,我们需要从以下几个方面去进行思考…...

微信小程序(十五)自定义导航栏
注释很详细,直接上代码 上一篇 新增内容: 1.组件文件夹创建方法 2.自定义组件的配置方法 3.外部修改组件样式(关闭样式隔离或传参) 创建组件文件夹 如果是手动创建建议注意在json文件声明: mynav.json {//声明为组件可…...

Python3进行pdf文件分割及转word
今天有个pdf分割的需求,电脑装的Python3,网上查资料都是Python2的代码,所以整理一份3的 安装: pip install PyPDF2 import PyPDF2def funSplitPdf():pdf_file open(/path/fileName.pdf, rb)pdf_reader PyPDF2.PdfReader(pdf_fi…...

深入理解TCP网络协议(1)
目录 1.TCP协议的段格式 2.TCP原理 2.1确认应答 2.2超时重传 3.三次握手(重点) 4.四次挥手 1.TCP协议的段格式 我们先来观察一下TCP协议的段格式图解: 源/目的端口号:标识数据从哪个进程来,到哪个进程去 32位序号/32位确认号:TCP会话的每一端都包含一个32位(…...

QT 中如何使用 JSON 功能?
在 Qt 中,您可以使用 QJsonDocument、QJsonObject 和 QJsonArray 类来处理 JSON 数据。以下是一个简单的示例,说明如何在 Qt 中使用这些类来解析和生成 JSON 数据: 1. 包含必要的头文件 首先,确保您的项目中包含了必要的 Qt JSO…...

C++面试:算法的执行效率和资源消耗、时间和空间复杂度分析根据实际场景,选用合适的数据结构和算法进行程序设计
目录 算法的执行效率和资源消耗、时间和空间复杂度分析 执行效率和资源消耗 时间复杂度分析 空间复杂度分析 实际应用 面试技巧 根据实际场景,选用合适的数据结构和算法进行程序设计 所根据原则 实例 如何选择数据结构示例 合适的数据结构:哈…...

力扣100215-按键变更的次数
按键变更的次数 题目链接 解题思路 我们发现只要相邻的两个字母不一样(大小写算一样),那么按键变更次数就要加1 class Solution { public:int countKeyChanges(string s) {int ans 0;for(int i 1;i<s.size();i){if(s[i] - s[i-1] 32 || s[i] - s[i-1] -32 |…...

STM32-GPIO输出(HAL库)
STM32-GPIO 介绍 什么是GPIO? GPIO(通用输入/输出)是一种用于与外部设备进行数字通信的通用硬件接口。它允许微控制器或其他数字电路的引脚以灵活的方式配置为输入或输出,并在运行时进行动态控制。GPIO可用于连接和控制各种外围…...

倒计时80天
1.J-兔子不会种树_浙江机电职业技术学院第八届新生亮相赛(同步赛) (nowcoder.com) /****** __----~~~~~~~~~~~------___* . . ~~//...... __--~ ~~…...

PBM模型参数详解
本专栏着重讲解PBM学习所得,学习笔记、心得,并附有视频素材资料,视频详细目录如下: PBM相关参数解释1PBM相关参数解释2PBM相关案例实践1PBM相关案例实践2PBM相关案例实践2PBM相关案例实践3PBM多相流中次相界面设置1PBM多相流中次…...

贪吃蛇/链表实现(C/C++)
本篇使用C语言实现贪吃蛇小游戏,我们将其分为了三个大部分,第一个部分游戏开始GameStart,游戏运行GameRun,以及游戏结束GameRun。对于整体游戏主要思想是基于链表实现,但若仅仅只有C语言的知识还不够,我们还…...

Qlik Sense : IntervalMatch(离散匹配)
什么是IntervalMatch IntervalMatch 前缀用于创建表格以便将离散数值与一个或多个数值间隔进行匹配,并且任选匹配一个或多个额外关键值。 语法: IntervalMatch (matchfield)(loadstatement | selectstatement ) IntervalMatch (matchfield,keyfield…...

MySql45讲-08.事务到底是隔离的还是不隔离的?(结合MVCC视频)
命令的启动时机 begin/start transaction 命令并不是一个事务的起点,在执行到它们之后的第一个操作InnoDB表的语句,事务才真正启动。如果你想要马上启动一个事务,可以使用start transaction with consistent snapshot 这个命令。 事务的版本…...

备战蓝桥杯----数据结构及STL应用(基础2)
上次我们讲了vector的大致内容,接下来让我们讲一下栈,队列吧! 什么是栈呢? 很简单,我们用的羽毛球桶就是,我们取的球,是最后放的,栈是一种先进后出的数据结构。 方法函数 s.push(…...

日常学习之:vue + django + docker + heroku 对后端项目 / 前后端整体项目进行部署
文章目录 使用 docker 在 heroku 上单独部署 vue 前端使用 docker 在 heroku 上单独部署 django 后端创建 heroku 项目构建 Dockerfile设置 settings.pydatabase静态文件管理安全设置applicaiton & 中间件配置 设置 requirements.txtheroku container 部署应用 前后端分别部…...

LangGraph:一个基于LangChain构建的AI库,用于创建具有状态、多参与者的应用程序
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...

04-Nacos-服务注册基于spring boot实现
官方参考 在不依赖spring cloud 组件基础上,单独的微服务项目,实现nacos接入 1、依赖文件pom.xml <dependency><groupId>com.alibaba.boot</groupId><artifactId>nacos-discovery-spring-boot-starter</artifactId><…...

iOS 闭包和Block的区别
iOS 闭包和Block的区别 原文地址: mob64ca12eb7baf 引言 在iOS开发中,闭包和Block是两个常用的概念。它们都是将一段代码作为变量传递和使用的方式。尽管它们在实现上有一些相似之处,但它们之间还是存在一些重要的区别。本文将会详细介绍闭包和Block的…...

后端学习笔记——后端细碎知识点(每天更新......)
细碎知识点 主要是go后端,也会设计到python、java的知识,懒得分类整理,所以都写在一篇文章里面了,方便自己查看笔记。 context.BindJSON获取POST请求中的json数据gin.H封装了生成json的方式 common.ReturnJSONSuccess(c, gin.H{&…...

二进制中1的个数
作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 学习必须往深处挖&…...

python+matlab text(按图的相对位置显示)
python 用 python 画图时,如果想采用归一化的坐标来指定文本框的位置,则需要用到 transform ax.transAxes 参数,如 ax plt.gca() plt.text(0.1,0.2, "text", fontsize 20, transform ax.transAxes)matlab 方法1 text(___,Name…...

rust 引用/mut 的所有权
在任意给定时间,要么 只能有一个可变引用,要么 只能有多个不可变引用。 不可变引用(shared reference)实现了Copy trait,不会发生所有权转移可变引用(mutable reference)未实现,会发…...

油烟净化器科技改革,清新用餐生活
我最近分析了餐饮市场的油烟净化器等产品报告,解决了餐饮业厨房油腻的难题,更加方便了在餐饮业和商业场所有需求的小伙伴们。 随着餐饮业蓬勃发展,人们对用餐环境的要求也与日俱增。本文将深入研讨餐饮油烟净化器技术的改革方向,…...

[足式机器人]Part3 机构运动学与动力学分析与建模 Ch01-1 刚体系统的运动学约束
本文仅供学习使用,总结很多本现有讲述运动学或动力学书籍后的总结,从矢量的角度进行分析,方法比较传统,但更易理解,并且现有的看似抽象方法,两者本质上并无不同。 2024年底本人学位论文发表后方可摘抄 若有帮助请引用 本文参考: 《空间机构的分析与综合(上册)》-张启先…...

51单片机智能小车
51单片机智能小车 delay.c #include "intrins.h"void Delay2000ms() //11.0592MHz {unsigned char i, j, k;i 15;j 2;k 235;do{do{while (--k);} while (--j);} while (--i); }void Delay10us() //11.0592MHz {unsigned char i;i 2;while (--i); }void Delay…...

9. 嵌入式系统开发:安全性与可靠性设计模式---引言
在复杂的嵌入式系统设计中,为了提高嵌入式系统安全性并保护嵌入式系统免受各种潜在故障的影响,可以采用不同的设计模式。这些模式各自有优势和适用的场景: 1. 受保护的单通道模式(Protected Single Channel Pattern) …...

内网安全:Exchange服务
目录 Exchange服务 实验环境 域横向移动-内网服务-Exchange探针 一. 端口扫描 二. SPN扫描 三. 脚本探针(还可以探针是否有安全漏洞) 域横向移动-内网服务-Exchange爆破 一 .BurpSuite Intruder模块爆破 域横向移动-内网服务-Exchange漏洞 CVE-2020-17144 Exchange R…...

Flask介绍和优势
Flask诞生于2010年,是由Armin Ronacher用Python语言编写的一款轻量级Web开发框架。自发布以来,Flask逐渐成为开发人员喜爱的选择,并在2021年5月发布了Flask 2.0版本,引入了一些新增特性,如基本的异步支持。 使用Flask…...