parent
7d8d1596e3
commit
81d0b068d6
@ -0,0 +1,20 @@ |
||||
--- |
||||
HashMap |
||||
--- |
||||
|
||||
#### 目录 |
||||
|
||||
1. 思维导图 |
||||
2. 概述 |
||||
3. 源码分析 |
||||
4. 常见问题 |
||||
5. 参考 |
||||
|
||||
#### 思维导图 |
||||
|
||||
#### 概述 |
||||
|
||||
|
||||
|
||||
#### 源码分析 |
||||
|
@ -0,0 +1,127 @@ |
||||
--- |
||||
异或应用 |
||||
--- |
||||
|
||||
#### 目录 |
||||
|
||||
1. 思维导图 |
||||
2. 概述 |
||||
3. 常见问题解决 |
||||
4. 参考 |
||||
|
||||
#### 思维导图 |
||||
|
||||
![](https://i.loli.net/2019/01/11/5c37f3306e40c.png) |
||||
|
||||
#### 概述 |
||||
|
||||
异或运算就是相同的元素运算结果等于 0,不相同的元素异或等于 1。 |
||||
|
||||
基于此,异或有以下特性: |
||||
|
||||
1. a^a = 0 |
||||
|
||||
相同的数异或为零。 |
||||
|
||||
2. a^0 = a |
||||
|
||||
任何数与零异都为其本身。 |
||||
|
||||
3. a = a ^ b ^ b |
||||
|
||||
#### 常见问题 |
||||
|
||||
##### 1. 不用中间变量交换 a 和 b |
||||
|
||||
```java |
||||
public static void main(String[] args) { |
||||
int a = 2333; |
||||
int b = 1234; |
||||
a = a ^ b; |
||||
b = a ^ b; |
||||
a = a ^ b; |
||||
System.out.println(a + " " + b); |
||||
} |
||||
``` |
||||
|
||||
##### 2. 一个整形数组,存 1 到 n 的所有整数,但缺少一个数,求这个数? |
||||
|
||||
```java |
||||
public static void main(String[] args) { |
||||
int[] ints = new int[233]; |
||||
for (int i = 0; i < 233; i++) { |
||||
ints[i] = i; |
||||
} |
||||
ints[23] = 0; |
||||
int result = 0; |
||||
for (int i = 0; i < ints.length; i++) { |
||||
result = i ^ result; |
||||
} |
||||
for (int i : ints) { |
||||
result = i ^ result; |
||||
} |
||||
System.out.println(result); |
||||
} |
||||
``` |
||||
|
||||
##### 3. 一个整形数组除了一个数只出现一次,其他都出现两次,求这个数? |
||||
|
||||
```java |
||||
public static void main(String[] args) { |
||||
int[] ints = new int[]{2, 3, 4, 5, 3, 4, 5, 7, 2, 9, 0, 7, 0}; |
||||
int result = 0; |
||||
for (int i : ints) { |
||||
result = result ^ i; |
||||
} |
||||
System.out.println(result); |
||||
} |
||||
``` |
||||
|
||||
##### 4. 一个整形数组除了两个数只出现一次,其他都出现两次,求这两个数? |
||||
|
||||
```java |
||||
public static void main(String[] args) { |
||||
int[] ints = new int[]{2, 5, 2, 9, 7, 5, 6, 9}; |
||||
int num = 0; |
||||
for (int i : ints) { |
||||
num = num ^ i; |
||||
} |
||||
ArrayList<Integer> list = new ArrayList<>(); |
||||
for (int i : ints) { |
||||
if (list.contains(num ^ i)) { |
||||
list.remove(Integer.valueOf(num ^ i)); |
||||
} else { |
||||
list.add(num ^ i); |
||||
} |
||||
} |
||||
System.out.println(list.get(0)); |
||||
System.out.println(list.get(1)); |
||||
} |
||||
``` |
||||
|
||||
##### 5. 一个整形数组除了三个数只出现一次,其他都出现两次,求这三个数? |
||||
|
||||
```java |
||||
public static void main(String[] args) { |
||||
int[] ints = new int[]{2, 5, 2, 9, 7, 5, 6, 9, 8}; |
||||
int num = 0; |
||||
for (int i : ints) { |
||||
num = num ^ i; |
||||
} |
||||
ArrayList<Integer> list = new ArrayList<>(); |
||||
for (int i : ints) { |
||||
if (list.contains(num ^ i)) { |
||||
list.remove(Integer.valueOf(num ^ i)); |
||||
} else { |
||||
list.add(num ^ i); |
||||
} |
||||
} |
||||
System.out.println(list.get(0) ^ num); |
||||
System.out.println(list.get(1) ^ num); |
||||
System.out.println(list.get(2) ^ num); |
||||
} |
||||
``` |
||||
|
||||
#### 参考 |
||||
|
||||
[异或应用小总结](https://blog.csdn.net/hulamua/article/details/52411446) |
@ -0,0 +1,16 @@ |
||||
--- |
||||
观察者模式 |
||||
--- |
||||
|
||||
#### 目录 |
||||
|
||||
1. 思维导图 |
||||
2. 概述 |
||||
3. |
||||
|
||||
#### 思维导图 |
||||
|
||||
#### 概述 |
||||
|
||||
观察者模式定义了对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖它的对象都会得到通知并自动更新。它的最重要作用就是解耦,将被观察者和观察者解耦,使得它们之间的依赖性更小。 |
||||
|
After Width: | Height: | Size: 65 KiB |
Loading…
Reference in new issue