From 4305177015ae32a0ad8b0c93105237060648bbab Mon Sep 17 00:00:00 2001
From: xiaotiancai893661742
<46739364+xiaotiancai893661742@users.noreply.github.com>
Date: Wed, 13 Jul 2022 00:20:05 +0800
Subject: [PATCH] 123
---
pom.xml | 3 +
src/test/java/maslaos/shejimos/Person.java | 53 +++++
src/test/java/maslaos/shejimos/Visitor.java | 55 +++++
src/test/java/zuolaos/jichuban/A.java | 5 +
.../zuolaos/jichuban/Code09_二叉树.java | 134 ++++++++++--
.../zuolaos/jichuban/Code10_各种排序.java | 196 ++++++++++++++++++
src/test/java/zuolaos/jichuban/Demo.java | 11 +-
7 files changed, 440 insertions(+), 17 deletions(-)
create mode 100644 src/test/java/maslaos/shejimos/Person.java
create mode 100644 src/test/java/maslaos/shejimos/Visitor.java
create mode 100644 src/test/java/zuolaos/jichuban/A.java
create mode 100644 src/test/java/zuolaos/jichuban/Code10_各种排序.java
diff --git a/pom.xml b/pom.xml
index 64950a1..5f0c536 100644
--- a/pom.xml
+++ b/pom.xml
@@ -20,5 +20,8 @@
+
+
+
\ No newline at end of file
diff --git a/src/test/java/maslaos/shejimos/Person.java b/src/test/java/maslaos/shejimos/Person.java
new file mode 100644
index 0000000..746fbf5
--- /dev/null
+++ b/src/test/java/maslaos/shejimos/Person.java
@@ -0,0 +1,53 @@
+package maslaos.shejimos;
+
+public class Person {
+ int a;
+ int b;
+ int c;
+ int d;
+
+ private Person(){
+ A a = new A(){};
+
+ }
+ static class PersonBuilder{
+ Person p =new Person();
+
+ PersonBuilder basic(int a,int b){
+ p.a=a;
+ p.b=b;
+ return this;
+ }
+
+ PersonBuilder c(int c){
+ p.c=c;
+ return this;
+ }
+
+ PersonBuilder d(int d){
+ p.d=d;
+ return this;
+ }
+
+ Person builder(){
+ return p;
+ }
+
+ }
+
+ abstract class A{
+// abstract void m();
+
+ }
+
+ public static void main(String[] args) {
+ Person person = new PersonBuilder()
+ .basic(1, 2)
+ .c(3)
+ .d(4)
+ .builder();
+
+
+ }
+
+}
diff --git a/src/test/java/maslaos/shejimos/Visitor.java b/src/test/java/maslaos/shejimos/Visitor.java
new file mode 100644
index 0000000..973141e
--- /dev/null
+++ b/src/test/java/maslaos/shejimos/Visitor.java
@@ -0,0 +1,55 @@
+package maslaos.shejimos;
+
+
+public class Visitor {
+
+ class DianRao{
+ Memory m;
+ Cpu cpu;
+ public DianRao(Vi v){
+ m.accpect(v);
+ cpu.accpect(v);
+ }
+ }
+ abstract class DianRaoPart{
+ abstract void accpect(Vi v);
+ }
+
+ class Memory extends DianRaoPart{
+ @Override
+ void accpect(Vi v) {
+ v.accpectMemory(this);
+ }
+ }
+
+ class Cpu extends DianRaoPart{
+ @Override
+ void accpect(Vi v) {
+ v.accpectCpu(this);
+ }
+ }
+
+
+ interface Vi{
+ void accpectCpu(Cpu c);
+ void accpectMemory(Memory m);
+ }
+
+ class Avi implements Vi{
+ @Override
+ public void accpectCpu(Cpu c) {
+ //我在你之前
+ }
+
+ @Override
+ public void accpectMemory(Memory m) {
+
+ }
+ }
+
+
+
+
+
+
+}
diff --git a/src/test/java/zuolaos/jichuban/A.java b/src/test/java/zuolaos/jichuban/A.java
new file mode 100644
index 0000000..06305e8
--- /dev/null
+++ b/src/test/java/zuolaos/jichuban/A.java
@@ -0,0 +1,5 @@
+package zuolaos.jichuban;
+
+public interface A {
+ void a();
+}
diff --git a/src/test/java/zuolaos/jichuban/Code09_二叉树.java b/src/test/java/zuolaos/jichuban/Code09_二叉树.java
index 93e9466..a4e8bb9 100644
--- a/src/test/java/zuolaos/jichuban/Code09_二叉树.java
+++ b/src/test/java/zuolaos/jichuban/Code09_二叉树.java
@@ -1,6 +1,5 @@
package zuolaos.jichuban;
-import com.sun.org.apache.regexp.internal.RE;
import java.util.*;
@@ -16,6 +15,39 @@ public class Code09_二叉树 {
}
}
+ private static class Info {
+ int height;
+ boolean isPing;
+
+ public Info(int height, boolean isPing) {
+ this.height = height;
+ this.isPing = isPing;
+ }
+ }
+
+ private static class Sousuo {
+ int max;
+ int min;
+ boolean isSousuo;
+
+ public Sousuo(boolean isSousuo, int max, int min) {
+ this.isSousuo = isSousuo;
+ this.max = max;
+ this.min = min;
+ }
+ }
+
+ //前序 中序 后序
+ public static void print(Node head) {
+ if (head == null) {
+ return;
+ }
+ print(head.left);
+ //中
+ System.out.println(head.value + " ");
+ print(head.right);
+ }
+
//相同结构的树判断
public static boolean isSameTree(Node heap1, Node heap2) {
@@ -39,15 +71,6 @@ public class Code09_二叉树 {
return heap1.value == heap2.value && isSameTree(heap1.left, heap2.right) && isSameTree(heap2.right, heap2.left);
}
- private static class Info {
- int height;
- boolean isPing;
-
- public Info(int height, boolean isPing) {
- this.height = height;
- this.isPing = isPing;
- }
- }
//平衡二叉树的判断
public static Info isPingHengTree(Node x) {
@@ -56,6 +79,10 @@ public class Code09_二叉树 {
}
Info leftInfo = isPingHengTree(x.left);
+ //todo 可优化
+// if (!leftInfo.isPing) {
+// return new Info(0, false);
+// }
Info rightInfo = isPingHengTree(x.right);
boolean isping = leftInfo.isPing && rightInfo.isPing && Math.abs(leftInfo.height - rightInfo.height) < 2;
int height = Math.max(leftInfo.height, rightInfo.height) + 1;
@@ -63,6 +90,40 @@ public class Code09_二叉树 {
}
+ //搜索二叉树的判断
+ public static Sousuo isSousuoTree(Node x) {
+ if (x == null) {
+ return null;
+ }
+ Sousuo leftNode = isSousuoTree(x.left);
+ Sousuo rightNode = isSousuoTree(x.right);
+ int max = x.value;
+ int min = x.value;
+ if (leftNode != null) {
+ max = Math.max(max, leftNode.max);
+ min = Math.min(min, leftNode.min);
+ }
+ if (rightNode != null) {
+ max = Math.max(max, rightNode.max);
+ min = Math.min(min, rightNode.min);
+ }
+
+ boolean isSousuo = true;
+ if (leftNode != null && !leftNode.isSousuo) {
+ isSousuo = false;
+ }
+ if (leftNode != null && !leftNode.isSousuo) {
+ isSousuo = false;
+ }
+ boolean leftMaxLessX = leftNode == null ? true : leftNode.max < x.value;
+ boolean rightMinMoreX = rightNode == null ? true : rightNode.min > x.value;
+ if (!(leftMaxLessX && rightMinMoreX)) {
+ isSousuo = false;
+ }
+ return new Sousuo(isSousuo, max, min);
+ }
+
+
//求最大深度
public static int maxDepth(Node node) {
if (node == null) {
@@ -72,8 +133,8 @@ public class Code09_二叉树 {
}
- //先序数组 中序数组 求数
- public static Node maxDepth22(int[] pre, int L1, int R1, int[] in, int L2, int R2) {
+ //先序数组+中序数组 构造树
+ public static Node zhongAndXian(int[] pre, int L1, int R1, int[] in, int L2, int R2) {
if (L1 > R1) {
return null;
}
@@ -86,8 +147,8 @@ public class Code09_二叉树 {
while (in[find] != pre[L1]) {
find++;
}
- head.left = maxDepth22(pre, L1 + 1, L1 + find - L2, in, L2, find - 1);
- head.right = maxDepth22(pre, L1 + find - L2 + 1, R1, in, find + 1, R2);
+ head.left = zhongAndXian(pre, L1 + 1, L1 + find - L2, in, L2, find - 1);
+ head.right = zhongAndXian(pre, L1 + find - L2 + 1, R1, in, find + 1, R2);
return head;
}
@@ -118,12 +179,53 @@ public class Code09_二叉树 {
}
+ //能否组成路径和
+ public static boolean isZhuSum(Node node, int sum) {
+ //叶子节点
+ if (node.left == null && node.right == null) {
+ return node.value == sum;
+ }
+ boolean cul = node.left == null ? false : isZhuSum(node.left, sum - node.value);
+ cul |= node.right == null ? false : isZhuSum(node.left, sum - node.value);
+ return cul;
+ }
+
+
+ //组成路径和时返回路径
+ public static void getLuJingList(Node node, List path, List> ans, int pre, int sum) {
+ if (node.left == null && node.right == null) {
+ if (pre + node.value == sum) {
+ path.add(node.value);
+ ans.add(new ArrayList<>(path));
+ path.remove(path.size() - 1);
+ }
+ return;
+ }
+
+ pre += node.value;
+ path.add(node.value);
+ if (node.left != null) {
+ getLuJingList(node.left, path, ans, pre, sum);
+ }
+ if (node.right != null) {
+ getLuJingList(node.right, path, ans, pre, sum);
+ }
+ path.remove(path.size() - 1);
+ }
+
public static void main(String[] args) {
//先
int[] arr1 = {1, 2, 3, 4, 5, 6, 7};
int[] arr2 = {3, 2, 4, 1, 6, 5, 7};
- Node node = maxDepth22(arr1, 0, arr1.length - 1, arr2, 0, arr2.length - 1);
+ Node node = zhongAndXian(arr1, 0, arr1.length - 1, arr2, 0, arr2.length - 1);
System.out.println(node);
- System.out.println(isPingHengTree(node).isPing);
+ Node node1 = new Node(1);
+ node1.left = new Node(2);
+ node1.left.left = new Node(2);
+ node1.left.left.left = new Node(2);
+ node1.right = new Node(2);
+ System.out.println(isPingHengTree(node1).isPing);
+
+ print(node);
}
}
diff --git a/src/test/java/zuolaos/jichuban/Code10_各种排序.java b/src/test/java/zuolaos/jichuban/Code10_各种排序.java
new file mode 100644
index 0000000..366329b
--- /dev/null
+++ b/src/test/java/zuolaos/jichuban/Code10_各种排序.java
@@ -0,0 +1,196 @@
+package zuolaos.jichuban;
+
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+
+public class Code10_各种排序 {
+
+ //归并排序-递归
+ public static void guiBing(int[] arr) {
+ if (arr == null || arr.length < 2) {
+ return;
+ }
+ guiBingProcess(arr, 0, arr.length - 1);
+ }
+
+
+ //归并排序-迭代 内部merge
+ public static void guiBing2(int[] arr) {
+ if (arr == null || arr.length < 2) {
+ return;
+ }
+ int step = 1;
+ int N = arr.length;
+ while (true) {
+ int L = 0;
+ int R = 0;
+ int mid = 0;
+ for (int i = 0; i < N; i += step) {
+ L = i;
+ R = (i + step - 1) < N ? (i + step - 1) : (N - 1);
+ mid = L + (step >> 1) - 1;
+// mid = L + ((R - L) >> 1);
+ merge(arr, L, mid, R);
+ }
+ if (step >= N) {
+ break;
+ }
+ step <<= 1;
+ }
+ }
+
+
+ //归并排序-迭代 外部左右merge
+ public static void guiBing3(int[] arr) {
+ if (arr == null || arr.length < 2) {
+ return;
+ }
+ int step = 1;
+ int N = arr.length;
+ while (step < N) {
+ int L = 0;
+ while (L < N) {
+ int mid = 0;
+ if (L < N - step - 1) {
+ mid = L + step - 1;
+ } else {
+ mid = N - 1;
+ }
+ int R = 0;
+ if (mid == N - 1) {
+ break;
+ }
+ if (mid + step < N) {
+ R = mid + step;
+ } else {
+ R = N - 1;
+ }
+ merge(arr, L, mid, R);
+ L = R + 1;
+ }
+ if (step > (N << 1)) {
+ break;
+ }
+ step <<= 1;
+ }
+ }
+
+
+ private static void guiBingProcess(int[] arr, int L, int R) {
+ if (L == R) {
+ return;
+ }
+ int mid = L + ((R - L) >> 1);
+ guiBingProcess(arr, L, mid);
+ guiBingProcess(arr, mid + 1, R);
+ merge(arr, L, mid, R);
+ }
+
+ public static void swap(int[] arr, int i, int j) {
+ int tmp = arr[i];
+ arr[i] = arr[j];
+ arr[j] = tmp;
+ }
+
+
+ //快速排序
+ public static void quickSort(int[] arr) {
+ if (arr == null || arr.length < 2) {
+ return;
+ }
+ quickSortProcess(arr, 0, arr.length - 1);
+ }
+
+ private static void quickSortProcess(int[] arr, int L, int R) {
+ if (L >= R) {
+ return;
+ }
+ int[] equlas = partition(arr, L, R);
+ quickSortProcess(arr, L, equlas[0] - 1);
+ quickSortProcess(arr, equlas[1] + 1, R);
+ }
+
+
+ //快速排序 - 核心方法
+ public static void split(int[] arr) {
+ int N = arr.length;
+ int lessXR = -1;
+ int moreXL = N - 1;
+ int index = 0;
+ while (index < moreXL) {
+ if (arr[index] < arr[N - 1]) {
+ lessXR++;
+ swap(arr, lessXR, index);
+ index++;
+ } else if (arr[index] > arr[N - 1]) {
+ moreXL--;
+ swap(arr, moreXL, index);
+ } else {
+ index++;
+ }
+ }
+ swap(arr, moreXL, N - 1);
+ }
+
+
+ //快速排序 - 核心方法
+ public static int[] partition(int[] arr, int L, int R) {
+ int lessXR = L - 1;
+ int moreXL = R;
+ int index = L;
+ while (index < moreXL) {
+ if (arr[index] < arr[R]) {
+ lessXR++;
+ swap(arr, lessXR, index);
+ index++;
+ } else if (arr[index] > arr[R]) {
+ moreXL--;
+ swap(arr, moreXL, index);
+ } else {
+ index++;
+ }
+ }
+ swap(arr, moreXL, R);
+ return new int[]{lessXR + 1, moreXL};
+ }
+
+ public void test() {
+ System.out.println(12);
+ }
+
+
+ //归并排序核心方法
+ private static void merge(int[] arr, int L, int M, int R) {
+ int[] help = new int[R - L + 1];
+ int i = 0;
+ int p1 = L;
+ int p2 = M + 1;
+ while (p1 <= M && p2 <= R) {
+ help[i++] = arr[p1] < arr[p2] ? arr[p1++] : arr[p2++];
+ }
+ while (p1 <= M) {
+ help[i++] = arr[p1++];
+ }
+ while (p2 <= R) {
+ help[i++] = arr[p2++];
+ }
+ for (int j = 0; j < help.length; j++) {
+ arr[L + j] = help[j];
+ }
+ }
+
+
+ public static void main(String[] args) throws Exception {
+ int[] arr = {9, 8, 7, 5, 6, 7};
+// guiBing3(arr);
+// split(arr);
+// System.out.println(arr);
+
+ Method guiBing = Class.forName("zuolaos.jichuban.Code10_各种排序").getMethod("guiBing", int[].class);
+
+ Object invoke = guiBing.invoke(Code10_各种排序.class,arr);
+ System.out.println(arr);
+
+
+ }
+}
diff --git a/src/test/java/zuolaos/jichuban/Demo.java b/src/test/java/zuolaos/jichuban/Demo.java
index 0b54162..29ac32e 100644
--- a/src/test/java/zuolaos/jichuban/Demo.java
+++ b/src/test/java/zuolaos/jichuban/Demo.java
@@ -1,4 +1,13 @@
package zuolaos.jichuban;
-public class Demo {
+public class Demo implements A {
+ public void a(){
+ System.out.println(12);
+ }
+
+ public static void main(String[] args) {
+ System.out.println(1);
+ }
+
+
}