Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
GreyZeng
algorithm
提交
ab6bd06d
A
algorithm
项目概览
GreyZeng
/
algorithm
通知
10
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
algorithm
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
ab6bd06d
编写于
12月 03, 2023
作者:
GreyZeng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update code
上级
800f44ff
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
75 addition
and
2 deletion
+75
-2
README.md
README.md
+2
-2
src/main/java/git/snippet/bit/BitMap.java
src/main/java/git/snippet/bit/BitMap.java
+36
-0
src/test/java/git/snippet/bit/BitMapTest.java
src/test/java/git/snippet/bit/BitMapTest.java
+37
-0
未找到文件。
README.md
浏览文件 @
ab6bd06d
...
...
@@ -22,6 +22,8 @@
[
链表K个节点的组内逆序调整问题
](
https://www.cnblogs.com/greyzeng/p/17859529.html
)
[
位图的使用与实现
](
https://www.cnblogs.com/greyzeng/p/16634282.html
)
## 更多
[
算法和数据结构学习笔记:CSDN
](
https://blog.csdn.net/hotonyhui/category_1250716.html
)
...
...
@@ -30,8 +32,6 @@
[
算法和数据结构学习代码: Github
](
https://github.com/GreyZeng/algorithm
)
[
算法和数据结构学习代码: GitCode
](
https://gitcode.net/hotonyhui/algorithm
)
## 参考资料
[
算法和数据结构基础班-左程云
](
https://ke.qq.com/course/2145184
)
\ No newline at end of file
src/main/java/git/snippet/bit/BitMap.java
0 → 100644
浏览文件 @
ab6bd06d
package
git.snippet.bit
;
import
java.util.HashSet
;
import
java.util.Set
;
// 位图
// 笔记:https://www.cnblogs.com/greyzeng/p/16634282.html
// 位图
public
class
BitMap
{
private
final
long
[]
bits
;
// 初始化
public
BitMap
(
int
max
)
{
// 准备多少个整数? 0 ~ 63 需要1个整数
// >> 6 就是 除以 64 >> 效率比除法高
bits
=
new
long
[(
max
+
64
)
>>
6
];
}
public
void
add
(
int
num
)
{
// bits[num / 64] |= (1L << (num % 64));
// num % 64 ---> num & 63 即:0b111111
// 只适用于 2 的 n 次方
// 注意:这里是1L非1,如果是1,因为要管64位
bits
[
num
>>
6
]
|=
(
1L
<<
(
num
&
0b111111
));
}
public
void
remove
(
int
num
)
{
bits
[
num
>>
6
]
&=
~(
1L
<<
(
num
&
0b111111
));
}
public
boolean
contains
(
int
num
)
{
return
(
bits
[
num
>>
6
]
&
(
1L
<<
(
num
&
0b111111
)))
!=
0
;
}
}
\ No newline at end of file
src/
main/java/git/snippet/bit/Code_BitMap
.java
→
src/
test/java/git/snippet/bit/BitMapTest
.java
浏览文件 @
ab6bd06d
package
git.snippet.bit
;
import
org.junit.jupiter.api.DisplayName
;
import
org.junit.jupiter.api.Test
;
import
java.util.HashSet
;
import
java.util.Set
;
// 位图
// 笔记:https://www.cnblogs.com/greyzeng/p/16634282.html
public
class
Code_BitMap
{
import
static
org
.
junit
.
jupiter
.
api
.
Assertions
.*;
public
static
void
main
(
String
[]
args
)
{
System
.
out
.
println
(
"test begin"
);
@DisplayName
(
"位图测试"
)
public
class
BitMapTest
{
@Test
void
testBitMap
()
{
// System.out.println("test begin");
int
max
=
70000
;
BitMap
bitMap
=
new
BitMap
(
max
);
Set
<
Integer
>
set
=
new
HashSet
<>();
...
...
@@ -23,46 +27,11 @@ public class Code_BitMap {
bitMap
.
remove
(
num
);
set
.
remove
(
num
);
}
else
{
if
(
bitMap
.
contains
(
num
)
!=
set
.
contains
(
num
))
{
System
.
out
.
println
(
"Oops!"
);
break
;
}
assertEquals
(
bitMap
.
contains
(
num
),
set
.
contains
(
num
));
}
}
for
(
int
num
=
0
;
num
<=
max
;
num
++)
{
if
(
bitMap
.
contains
(
num
)
!=
set
.
contains
(
num
))
{
System
.
out
.
println
(
"Oops!"
);
}
}
System
.
out
.
println
(
"test end"
);
}
// 位图
public
static
class
BitMap
{
private
final
long
[]
bits
;
// 初始化
public
BitMap
(
int
max
)
{
// 准备多少个整数? 0 ~ 63 需要1个整数
// >> 6 就是 除以 64 >> 效率比除法高
bits
=
new
long
[(
max
+
64
)
>>
6
];
}
public
void
add
(
int
num
)
{
// bits[num / 64] |= (1L << (num % 64));
// num % 64 ---> num & 63 即:0b111111
// 只适用于 2 的 n 次方
// 注意:这里是1L非1,如果是1,因为要管64位
bits
[
num
>>
6
]
|=
(
1L
<<
(
num
&
0b111111
));
}
public
void
remove
(
int
num
)
{
bits
[
num
>>
6
]
&=
~(
1L
<<
(
num
&
0b111111
));
}
public
boolean
contains
(
int
num
)
{
return
(
bits
[
num
>>
6
]
&
(
1L
<<
(
num
&
0b111111
)))
!=
0
;
assertEquals
(
bitMap
.
contains
(
num
),
set
.
contains
(
num
));
}
}
}
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录