算法必刷系列之位运算

位运算

位运算既能在某些条件下提升运算速度,又能在某些条件下节省运算内存。计算机底层涉及大量位运算,位运算可以替代加加减乘除。位运算的基本运算单元是bit,相比于整数的int占据四个字节,大量节约运算空间,适用于海量数据处理

位1的个数

leetcode191
通过1移位并与给出的数字进行与运算判断对应位置是否位1

public int hammingWeight(int n) {int count = 0;for(int i=0;i<32;i++){int res = n&(1<<i);if(res!=0){count++;}}return count;
}

比特位计数

leetcode338
将某个数字与该数字减1的数字进行与运算,可以使该数字的最后一个为1的bit位变为0,重复操作,直至该数字为0,操作次数就是bit位1的个数

public int[] countBits(int n) {int[] counts = new int[n+1];for(int i=0;i<n+1;i++){counts[i] = count(i);}return counts;
}public int count(int n){int count = 0;while(n!=0){n=n&(n-1);count++;}return count;
}

颠倒32位无符号整数

leetcode190
不断从无符号整数的末尾取比特位,左移31-对应位置,遍历结束之后,完成反转

public int reverseBits(int n) {int reverseN = 0;for(int i=0;i<32;i++){int res = n&(1<<i);if(res!=0){reverseN += (1<<(31-i));}}
}  

两整数之和

leetcode371
通过与运算计算进位,通过亦或运算进行不包括进位的加法,然后再将进位相加,重复这个过程,直至进位为0

public int getSum(int a, int b) {while(b!=0){int sign = (a&b)<<1;a=a^b;b=sign;}return a;
}

递归乘法

leetcode08.05
通过将乘数中较小的数字拆分成2的n次方的形式,并通过移位运算实现乘法,之所以选择较小的乘数是因为运算次数少

public int multiply(int A, int B) {int res = 0;int min = Math.min(A,B);int max = Math.max(A,B);for(int i=0;i<32;i++){int temp = min&(1<<i);if(temp!=0){res+=(max<<i);}}return res;
}

4KB内存寻找重复元素

给定一个数组,数组中包含N个数字,N最大为32000,数组中存在重复数字,且N的大小不确定,要求用4KB内存实现输出数组中的所有重复数字

32000个数字使用int类型存储,内存是肯定大于4KB的。我们可以考虑使用bit数组来实现,数组的下标代表数字,bit位为0代表没有出现,bit位为1代表已经出现,进行输出

public class Bit {public void checkDuplicates(int[] array){BitSet bs = new BitSet(32000);for (int i = 0; i < array.length; i++) {int num = array[i];int num0 = num-1;if(bs.get(num0)){System.out.println(num);}else {bs.set(num0);}}}
}class BitSet {int[] bitSet;public BitSet(int size) {this.bitSet = new int[size >> 5];}boolean get(int pos) {int wordNumber = pos >> 5;int bitNumber = pos & 0x1F;return (bitSet[wordNumber]&(1<<bitNumber))!=0;}void set(int pos){int wordNumber = pos >> 5;int bitNumber = pos & 0x1F;bitSet[wordNumber] |= (1<<bitNumber);}
}

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

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

相关文章

算法之冒泡排序

算法之冒泡排序 冒泡排序Bubble Sort 交换排序相邻元素两两比较大小&#xff0c;有必要则交换。元素越小或越大&#xff0c;就会在数列中慢慢的交换并“浮”向顶端&#xff0c;如同水泡咕嘟咕嘟往上冒。 核心算法 排序算法&#xff0c;一般都实现为就地排序&#xff0c;输出…

ESP32网络开发实例-物联网声污染监测系统

物联网声污染监测系统 文章目录 物联网声污染监测系统1、KY-038 声音传感器模块2、软件准备3、硬件准备4、代码实现在本文中,我们将使用 ESP32、声音模块和 Blynk 应用程序创建一个基于物联网的声音污染监测系统。 我们将使用 KY-038 麦克风传感器以分贝为单位检测声音并在 OL…

vscode c++ 报错identifier “string“ is undefined

vscode c 报identifier “string” is undefined 问题 新装了电脑, 装好vsc和g等, 发现报错 但开头并没问题 解决 shiftctrlp选择 C/C Edit:COnfigurations (JSON)自动生成打开 c_cpp_properties.json添加g路径等 "cStandard": "c11","cppStanda…

【数据结构(二)】单链表(3)

文章目录 1. 链表介绍2. 单链表应用实例2.1. 顺序添加方式2.1.1. 思路分析2.1.2. 代码实现 2.2. 按照编号顺序添加方式2.2.1. 思路分析2.2.2. 代码实现 3. 单链表节点的修改3.1. 思路分析3.2. 代码实现 4. 单链表节点的删除4.1. 思路分析4.2. 代码实现 5. 单链表常见面试题5.1.…

Universal adversarial perturbations(2017 CVPR)

Universal adversarial perturbations----《普遍对抗扰动》 通俗UAP算法步骤理解&#xff1a;对于 x i ∈ X {x_i} \in X xi​∈X 的每个采样数据点&#xff0c;比较 k ^ ( x i v ) \hat k({x_i} v) k^(xi​v) 与 k ^ ( x i ) \hat k({x_i}) k^(xi​) &#xff0c;如果 k…

JAVA工具类匹配重复或者连续的字符和符号

import java.util.ArrayList; import java.util.List;public class StringChecker {static String SYMBOLS "~!#$%^&*()_{}|<>?,./";static List<String> symbolSubstrings splitStringIntoSubstrings(SYMBOLS, 3);/*** 检查字符串是否包含重复或…

Rust与其他语言对比:优势在哪里?

大家好&#xff01;我是lincyang。 今天&#xff0c;我们将深入探讨Rust语言与其他编程语言比较的优势&#xff0c;并通过具体的代码示例和性能数据来加深理解。 Rust与其他语言的比较 1. 内存安全性 Rust&#xff1a;采用所有权系统&#xff0c;编译器在编译时检查内存安全…

西南科技大学814考研二

C语言数据结构与算法 线性表 顺序表(静态分配内存) #include <stdio.h> #include <stdbool.h> //静态顺序表 #define MAX_SIZE 8 //顺序表储存的数据类型 typedef int ElemType; typedef struct {ElemType data[MAX_SIZE];int length; }SeqList; //初始化顺序表…

redis 非关系型数据库

redis 非关系型数据库&#xff0c;缓存型数据库。 关系型数据库和非关系型数据库的区别 关系型数据库是一个机构化的数据库&#xff0c;行和列。 列&#xff1a;声明对象 行&#xff1a;记录对象属性。 表与表之间是有关联&#xff0c;使用sql语句&#xff0c;来对指定的表…

Oracle 存储过程数据插入临时表慢以及SQL语句查询慢

/*parallel*/ 解释: 一般表数据量比较大&#xff08;超过100万&#xff09;时&#xff0c;可以使用parallel强制启动并行度来提升查询速度 用法&#xff1a;/*parallel(table_short_name,cash_number)*/ 可以加到insert、delete、update、select的后面来使用 比如&#xff…

Linux:安装MySQL服务(非docker方式)

1、下载安装包 下载MySQL安装包&#xff0c;需要Oracle官网的账号 下面是网友提供的账号及密码&#xff0c;亲测有效。 账户&#xff1a;3028064308qq.com 我用的这个&#xff0c;可以登陆 密码&#xff1a;OraclePassword123!Oracle Account: 602205528qq.com Oracle Pass…

计算机毕业设计选题推荐-掌心办公微信小程序/安卓APP-项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

根据表名动态获取数据

查询接口 ApiOperation("通用高级搜索")PostMapping("/highSearch")public ResponseResult highSearch(RequestBody HighSearchVO highSearchVO) {return dynamicDataRetrievalService.highSearch(highSearchVO);} Service OverrideTransactionalpublic R…

list转map(根据某个或多个属性分组)

需要将对应的list换成本地list&#xff0c;和对象换成本地对象 1、List转Map<String,List> // 根据一个字段分组 Map<String, List<String>> map objectLists.stream().collect(Collectors.groupingBy(Object::getName,Collectors.mapping(Object::getId, …

【小技巧】MyBatis 中 SQL 写法技巧小总结

最近有个兄弟在搞mybatis&#xff0c;问我怎么写sql &#xff0c;说简单一点mybatis就是写原生sql&#xff0c;官方都说了 mybatis 的动态sql语句是基于 OGNL表达式的。可以方便的在 sql 语句中实现某些逻辑. 总体说来mybatis 动态SQL 语句主要有以下几类: if 语句 (简单的条件…

r语言plot函数

R语言中的plot()函数是一个用于创建各种类型的图形的基本绘图函数。它可以用来绘制散点图、线图、直方图、箱线图、饼图等多种图形。以下是plot()函数的基本语法和一些示例用法&#xff1a; 基本语法: plot(x, y, type "p", ...) 参数说明: x: 用于绘图的x轴数据&a…

分形简单版

我的代码&#xff1a; #include<bits/stdc.h> using namespace std; const int N1000; int n; char s[N][N]; void work(int x) {if(x1) {s[0][0]*;return;}work(x-1);for(int i0;i<(1<<x-2);i)for(int j(1<<x-2);j<(1<<x-1);j) s[i][j]s[i][j-(…

Java的IO流-打印流

打印流 PrintStream public void println&#xff08;&#xff09;自动换行 PrintWriter package com.itheima.println;import java.io.FileInputStream; import java.io.PrintStream; import java.io.PrintWriter;public class Test2 {public static void main(String[] arg…

MSSQL-逻辑级常用命令

--SQL Server 查询表的记录数 --one: 使用系统表. SELECT object_name (i.id) TableName, rows as RowCnt FROM sysindexes i INNER JOIN sysObjects o ON (o.id i.id AND o.xType U ) WHERE indid < 2 ORDER BY rows desc ————————————…

【Linux】第十九站:进程替换

文章目录 一、单进程版---最简单的程序替换二、进程替换的原理三、多进程的程序替换1.多进程的程序替换实例2.那么程序在替换时候有没有创建子进程呢3.再谈原理4.一个现象5.我们的CPU如何得知程序的入口地址&#xff1f; 四、各个接口的介绍1.execl2.execlp3.execv4.execvp5.ex…