complete 异或应用

master
Omooo 6 years ago
parent 7d8d1596e3
commit 81d0b068d6
  1. 20
      blogs/Algorithm/HashMap.md
  2. 127
      blogs/Algorithm/异或应用.md
  3. 16
      blogs/DesignMode/观察者模式.md
  4. BIN
      images/data_structure/异或.png

@ -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.
#### 思维导图
#### 概述
观察者模式定义了对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖它的对象都会得到通知并自动更新。它的最重要作用就是解耦,将被观察者和观察者解耦,使得它们之间的依赖性更小。

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Loading…
Cancel
Save