diff --git a/blogs/Algorithm/HashMap.md b/blogs/Algorithm/HashMap.md new file mode 100644 index 0000000..5317db6 --- /dev/null +++ b/blogs/Algorithm/HashMap.md @@ -0,0 +1,20 @@ +--- +HashMap +--- + +#### 目录 + +1. 思维导图 +2. 概述 +3. 源码分析 +4. 常见问题 +5. 参考 + +#### 思维导图 + +#### 概述 + + + +#### 源码分析 + diff --git a/blogs/Algorithm/异或应用.md b/blogs/Algorithm/异或应用.md new file mode 100644 index 0000000..2cfa670 --- /dev/null +++ b/blogs/Algorithm/异或应用.md @@ -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 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 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) \ No newline at end of file diff --git a/blogs/DesignMode/观察者模式.md b/blogs/DesignMode/观察者模式.md new file mode 100644 index 0000000..ee0474d --- /dev/null +++ b/blogs/DesignMode/观察者模式.md @@ -0,0 +1,16 @@ +--- +观察者模式 +--- + +#### 目录 + +1. 思维导图 +2. 概述 +3. + +#### 思维导图 + +#### 概述 + +观察者模式定义了对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖它的对象都会得到通知并自动更新。它的最重要作用就是解耦,将被观察者和观察者解耦,使得它们之间的依赖性更小。 + diff --git a/images/data_structure/异或.png b/images/data_structure/异或.png new file mode 100644 index 0000000..e1a3ff3 Binary files /dev/null and b/images/data_structure/异或.png differ