|
|
|
@ -51,6 +51,37 @@ private static Node reverDoubleLinkedList(Node head) {
|
|
|
|
|
|
|
|
|
|
### 位图
|
|
|
|
|
|
|
|
|
|
位图的功能
|
|
|
|
|
位图的好处
|
|
|
|
|
位图的用法
|
|
|
|
|
位图的功能 保存已知最大值的集合
|
|
|
|
|
位图的好处 极大的节省空间
|
|
|
|
|
位图的实现 java.util.BitSet
|
|
|
|
|
|
|
|
|
|
```Java
|
|
|
|
|
public class BitMap {
|
|
|
|
|
private long[] bits;
|
|
|
|
|
|
|
|
|
|
public BitMap(int max) {
|
|
|
|
|
bits = new long[(max + 64) >> 6];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 给定数字除以64的结果result,模64的结果mod分开保存,bits[result]位置的mod位设置为1
|
|
|
|
|
public void add(int num){
|
|
|
|
|
// num&63等于num%64
|
|
|
|
|
bits[num >> 6] |= (1L << (num & 63));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void delete(int num){
|
|
|
|
|
bits[num >> 6] &= ~(1L << (num & 63));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public boolean contains(int num){
|
|
|
|
|
return (bits[num >> 6] & (1L << (num & 63))) != 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### 位运算实现加减乘除 LeetCode29
|
|
|
|
|
|
|
|
|
|
加法add a^b结果为无进位相加,(a&b)<<1是进位信息,递归到进位信息为0,注意中间变量。
|
|
|
|
|
减法delete add(a,add(~b,1)),取反加1后为负数。
|
|
|
|
|
乘法 a左移b的每一位进制的位数相加。
|
|
|
|
|
除法 先取绝对值,a右移到刚好大于等于b,拿到一个商,最后所有商相加,补上符号。对系统最小值特殊处理。
|
|
|
|
|