diff --git a/.idea/leetcode/editor.xml b/.idea/leetcode/editor.xml
index 542a39e..a2d70d1 100644
--- a/.idea/leetcode/editor.xml
+++ b/.idea/leetcode/editor.xml
@@ -11,6 +11,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -19,6 +35,14 @@
+
+
+
+
+
+
+
+
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index d744e60..42c7d8e 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -2,13 +2,39 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
-
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
@@ -111,7 +191,37 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -119,57 +229,50 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+ file://$PROJECT_DIR$/src/T200909.java
+ 137
+
+
+
+ file://$PROJECT_DIR$/src/T20201009.java
+ 72
+
+
+
+ file://$PROJECT_DIR$/src/Jvmt1.java
+ 11
+
+
+
+ file://$PROJECT_DIR$/src/JvmTest2.java
+ 14
+
+
+
+ file://$PROJECT_DIR$/src/JvmTest.java
+ 17
+
+
+
+ file://$PROJECT_DIR$/src/JvmTest4.java
+ 12
+
+
+
+ file://$PROJECT_DIR$/src/JvmTest4.java
+ 32
+
+
+
+
\ No newline at end of file
diff --git a/out/production/suanfa/JHJ.class b/out/production/suanfa/JHJ.class
new file mode 100644
index 0000000..5165774
Binary files /dev/null and b/out/production/suanfa/JHJ.class differ
diff --git a/out/production/suanfa/JvmTest.class b/out/production/suanfa/JvmTest.class
new file mode 100644
index 0000000..9e07b3d
Binary files /dev/null and b/out/production/suanfa/JvmTest.class differ
diff --git a/out/production/suanfa/JvmTest2.class b/out/production/suanfa/JvmTest2.class
new file mode 100644
index 0000000..e9f75a7
Binary files /dev/null and b/out/production/suanfa/JvmTest2.class differ
diff --git a/out/production/suanfa/JvmTest3.class b/out/production/suanfa/JvmTest3.class
new file mode 100644
index 0000000..5e42da5
Binary files /dev/null and b/out/production/suanfa/JvmTest3.class differ
diff --git a/out/production/suanfa/JvmTest4.class b/out/production/suanfa/JvmTest4.class
new file mode 100644
index 0000000..547ea19
Binary files /dev/null and b/out/production/suanfa/JvmTest4.class differ
diff --git a/out/production/suanfa/Jvmt1.class b/out/production/suanfa/Jvmt1.class
new file mode 100644
index 0000000..55e1224
Binary files /dev/null and b/out/production/suanfa/Jvmt1.class differ
diff --git a/out/production/suanfa/ListNode.class b/out/production/suanfa/ListNode.class
new file mode 100644
index 0000000..5df2413
Binary files /dev/null and b/out/production/suanfa/ListNode.class differ
diff --git a/out/production/suanfa/T200909.class b/out/production/suanfa/T200909.class
index c3dfe27..3a7da72 100644
Binary files a/out/production/suanfa/T200909.class and b/out/production/suanfa/T200909.class differ
diff --git a/out/production/suanfa/T20201009.class b/out/production/suanfa/T20201009.class
new file mode 100644
index 0000000..0390acd
Binary files /dev/null and b/out/production/suanfa/T20201009.class differ
diff --git a/out/production/suanfa/T20201010.class b/out/production/suanfa/T20201010.class
new file mode 100644
index 0000000..082e5b7
Binary files /dev/null and b/out/production/suanfa/T20201010.class differ
diff --git a/out/production/suanfa/dp/Dp20201113.class b/out/production/suanfa/dp/Dp20201113.class
new file mode 100644
index 0000000..fb71d93
Binary files /dev/null and b/out/production/suanfa/dp/Dp20201113.class differ
diff --git a/out/production/suanfa/string/StringTest20201118.class b/out/production/suanfa/string/StringTest20201118.class
new file mode 100644
index 0000000..48d1503
Binary files /dev/null and b/out/production/suanfa/string/StringTest20201118.class differ
diff --git a/out/production/suanfa/tree/Bfs.class b/out/production/suanfa/tree/Bfs.class
new file mode 100644
index 0000000..0d28edb
Binary files /dev/null and b/out/production/suanfa/tree/Bfs.class differ
diff --git a/out/production/suanfa/tree/BianryTree.class b/out/production/suanfa/tree/BianryTree.class
new file mode 100644
index 0000000..871b836
Binary files /dev/null and b/out/production/suanfa/tree/BianryTree.class differ
diff --git a/out/production/suanfa/tree/TreeNode.class b/out/production/suanfa/tree/TreeNode.class
new file mode 100644
index 0000000..cf21bdb
Binary files /dev/null and b/out/production/suanfa/tree/TreeNode.class differ
diff --git a/src/JHJ.java b/src/JHJ.java
new file mode 100644
index 0000000..af23ad2
--- /dev/null
+++ b/src/JHJ.java
@@ -0,0 +1,10 @@
+/**
+ * @author :liubaosong
+ * @date :Created in 2020/10/27 17:20
+ * @description:
+ */
+public class JHJ {
+ public static void main(String[] args) {
+ System.out.println("hello word");
+ }
+}
diff --git a/src/JvmTest.java b/src/JvmTest.java
new file mode 100644
index 0000000..47963d2
--- /dev/null
+++ b/src/JvmTest.java
@@ -0,0 +1,37 @@
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author :liubaosong
+ * @date :Created in 2020/10/17 16:32
+ * @description:jvm test
+ */
+public class JvmTest {
+
+ /**
+ * -Xms512M -Xmx512M -Xmn400M -Xss1M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M
+ *
+ * @throws InterruptedException
+ */
+ void test() throws InterruptedException {
+ List list = new ArrayList();
+ //首先生成200M的对象
+ for (int i = 0; i < 200; i++) {
+ byte[] a = new byte[1024 * 1024 * 1];
+ }
+ //每次增加50M 循环到第二次的时候eden 满了触发 YGC
+ for (int i = 0; i < 1000; i++) {
+ byte[] a = new byte[1024 * 1024 * 50];
+ Thread.sleep(1000);
+ }
+
+ }
+
+
+ public static void main(String[] args) throws InterruptedException {
+ JvmTest j = new JvmTest();
+ j.test();
+ }
+
+}
diff --git a/src/JvmTest2.java b/src/JvmTest2.java
new file mode 100644
index 0000000..468e356
--- /dev/null
+++ b/src/JvmTest2.java
@@ -0,0 +1,26 @@
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author :liubaosong
+ * @date :Created in 2020/10/30 13:38
+ * @description:
+ */
+public class JvmTest2 {
+ /**
+ * -Xms512M -Xmx512M -Xmn400M -Xss1M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M
+ * @throws InterruptedException
+ */
+ void test() throws InterruptedException {
+ List list = new ArrayList();
+ byte[] b = new byte[1024 * 1024 * 290];
+ for (int i = 0; i < 1000; i++) {
+ byte[] a = new byte[1024 * 1024 * 10];
+ }
+ }
+
+ public static void main(String[] args) throws InterruptedException {
+ JvmTest2 jvmTest2 = new JvmTest2();
+ jvmTest2.test();
+ }
+}
diff --git a/src/JvmTest3.java b/src/JvmTest3.java
new file mode 100644
index 0000000..1b981db
--- /dev/null
+++ b/src/JvmTest3.java
@@ -0,0 +1,27 @@
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author :liubaosong
+ * @date :Created in 2020/10/30 13:38
+ * @description:
+ */
+public class JvmTest3 {
+
+ void test() throws InterruptedException {
+ List list = new ArrayList();
+ for (int i = 0; i < 200; i++) {
+ list.add(new byte[1024 * 1024 * 1]);
+ }
+
+ for (int i = 0; i < 1000; i++) {
+ list.add(new byte[1024 * 1024 * 30]);
+ Thread.sleep(1000);
+ }
+ }
+
+ public static void main(String[] args) throws InterruptedException {
+ JvmTest3 j = new JvmTest3();
+ j.test();
+ }
+}
diff --git a/src/JvmTest4.java b/src/JvmTest4.java
new file mode 100644
index 0000000..414bdb2
--- /dev/null
+++ b/src/JvmTest4.java
@@ -0,0 +1,41 @@
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author :liubaosong
+ * @date :Created in 2020/10/30 13:38
+ * @description:
+ */
+public class JvmTest4 {
+
+ void test() throws InterruptedException {
+ //首先生成200M的对象
+ byte[] a = new byte[1024 * 1024 * 50];
+
+ Byte[] a1 = new Byte[1024 * 1024 * 50];
+
+// //每次增加30M 加到h内存溢出
+//
+// byte[] b = new byte[1024 * 1024 * 30];
+// Thread.sleep(1000);
+// byte[] c = new byte[1024 * 1024 * 30];
+// Thread.sleep(1000);
+// byte[] d = new byte[1024 * 1024 * 30];
+// Thread.sleep(1000);
+// byte[] e = new byte[1024 * 1024 * 30];
+// Thread.sleep(1000);
+// byte[] f = new byte[1024 * 1024 * 30];
+// Thread.sleep(1000);
+// byte[] g = new byte[1024 * 1024 * 30];
+// Thread.sleep(1000);
+// byte[] h = new byte[1024 * 1024 * 30];
+
+ System.out.println("aa");
+
+ }
+
+ public static void main(String[] args) throws InterruptedException {
+ JvmTest4 j = new JvmTest4();
+ j.test();
+ }
+}
diff --git a/src/Jvmt1.java b/src/Jvmt1.java
new file mode 100644
index 0000000..0937db2
--- /dev/null
+++ b/src/Jvmt1.java
@@ -0,0 +1,33 @@
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author :liubaosong
+ * @date :Created in 2020/10/29 17:37
+ * @description:
+ */
+public class Jvmt1 {
+ private static final int _1MB = 1024 * 1024;
+ public static void main(String[] args) throws InterruptedException {
+ System.out.println("0.---");
+ List caches = new ArrayList();
+ for (int i = 0; i < 11; i++){
+ caches.add(new byte[3 * _1MB]);
+
+ }
+ System.out.println("1.---");
+ caches.add(new byte[3 * _1MB]);
+ caches.remove(0);
+ caches.add(new byte[3 * _1MB]);
+ for (int i = 0; i < 8; i++) {
+ caches.remove(0);
+ Thread.sleep(1000);
+ }
+ caches.add(new byte[3 * _1MB]);
+ System.out.println("2.---");
+ for (int i = 0; i < 7; i++){
+ caches.add(new byte[3 * _1MB]);
+ Thread.sleep(1000);
+ }
+ }
+}
diff --git a/src/ListNode.java b/src/ListNode.java
new file mode 100644
index 0000000..eaf2365
--- /dev/null
+++ b/src/ListNode.java
@@ -0,0 +1,10 @@
+/**
+ * @author :liubaosong
+ * @date :Created in 2020/10/10 9:55
+ * @description:
+ */
+public class ListNode {
+ int val;
+ ListNode next;
+ ListNode(int x) { val = x; }
+}
diff --git a/src/T200909.java b/src/T200909.java
index 715e80d..69514ae 100644
--- a/src/T200909.java
+++ b/src/T200909.java
@@ -1,5 +1,10 @@
import org.junit.Test;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Queue;
+
/**
* @author :liubaosong
* @date :Created in 2020/9/9 19:06
@@ -75,4 +80,109 @@ public void test2(){
String[] strings=new String[]{"length","leng","lensss"};
System.out.println(t2(strings));
}
+
+ /**
+ * 买股票问题
+ * @param prices
+ * @return
+ */
+ public int maxProfit(int[] prices) {
+
+ int i = 0;
+ int valley = prices[0];
+ int peak = prices[0];
+ int maxprofit = 0;
+ while (i < prices.length - 1) {
+ while (i < prices.length - 1 && prices[i] >= prices[i + 1])
+ i++;
+ valley = prices[i];
+ while (i < prices.length - 1 && prices[i] <= prices[i + 1])
+ i++;
+ peak = prices[i];
+ maxprofit += peak - valley;
+ }
+ return maxprofit;
+
+ }
+
+
+ @Test
+ public void test3(){
+ int[] arr = new int[]{7,1,5,3,6,4};
+ System.out.println(maxProfit(arr));
+ }
+
+ /**
+ * 旋转数组
+ */
+ public static int[] rotate(int[] nums, int k) {
+ if (k>nums.length){
+ k = k%nums.length;
+ }
+ int l = nums.length;
+ int[] num2 = new int[nums.length];
+ for (int i=0 ;i> threeSum(int[] nums) {
+ int n = nums.length;
+ Arrays.sort(nums);
+ List> list = new ArrayList<>();
+ for (int first = 0;first0&&nums[first]==nums[first-1]){
+ continue;
+ }
+ //c指针指向数组的最后一个元素
+ int third = n-1;
+ //目标元素
+ int target = -nums[first];
+ for (int second = first+1;secondfirst+1&&nums[second]==nums[second-1]){
+ continue;
+ }
+ // 需要保证 b 的指针在 c 的指针的左侧
+ while (second < third && nums[second] + nums[third] > target) {
+ --third;
+ }
+ if (second == third){
+ break;
+ }
+
+ if (nums[second]+nums[third]==target){
+ List list1 = new ArrayList<>();
+ list1.add(first);
+ list1.add(second);
+ list1.add(third);
+ list.add(list1);
+ }
+
+
+ }
+ }
+ return list;
+ }
+
+
+
}
diff --git a/src/T20201009.java b/src/T20201009.java
new file mode 100644
index 0000000..546f243
--- /dev/null
+++ b/src/T20201009.java
@@ -0,0 +1,102 @@
+import java.util.Deque;
+import java.util.LinkedList;
+
+/**
+ * @author :liubaosong
+ * @date :Created in 2020/10/9 14:56
+ * @description:滑动窗口的最大值
+ */
+public class T20201009 {
+
+ public int[] maxSlidingWindow(int[] nums, int k) {
+ if(nums.length == 0 || k == 0) return new int[0];
+ Deque deque = new LinkedList<>();
+ int[] res = new int[nums.length - k + 1];
+ //未形成窗口
+ for(int i = 0; i < k; i++) { // 未形成窗口
+ while (!deque.isEmpty()&&deque.peekLast()> triangle){
+ int n = triangle.size();
+ //dp[i][j] =表示从点(i,j) 到底部的最小路径和
+ int[][] dp = new int[n+1][n+1];
+ for (int i = n-1; i >= 0; i--){
+ for(int j = 0;j <= i; j++){
+ dp[i][j] = Math.min(dp[i+1][j],dp[i+1][j+1]) + triangle.get(i).get(j);
+ }
+ }
+ return dp[0][0];
+ }
+ /**
+ * 最小路径之和 dp[i][j] 表示dp (0,0) 到(i,j) 的最小路径和 dp[i][j] = min(dp[i,j-1, dp[i-1][j]) + tar[i][j] 所以 从左上角到右下角的最小路径和 就是dp[m-1][n-1] (m 代表行数 n代表列数)
+ *
+ */
+ public static int minPathSum(int [][] grid){
+ if (grid == null || grid.length == 0 || grid[0].length ==0){
+ return 0;
+ }
+ //行
+ int m = grid.length;
+ //列
+ int n = grid[0].length;
+ int [][] dp = new int[m][n];
+ dp[0][0] = grid[0][0];
+
+ //三种情况
+ for (int i = 1; i < m; i++){
+ dp[i][0] = dp[i-1][0] + grid[i][0];
+ }
+ for (int j = 1; j < n; j++){
+ dp[0][j] = dp[0][j-1] + grid[0][j];
+ }
+ for (int i =1 ;i < m; i++){
+ for (int j = 1; j < n; j++){
+ dp[i][j] = Math.min(dp[i][j-1], dp[i-1][j]) + grid[i][j];
+ }
+ }
+ return dp[m-1][n-1];
+ }
+
+ /**
+ * 打家劫舍 dp[i] 为偷取到第i家时(不含第i家) 获取的最大现金数 dp[i] = max(dp[i-2]+num[i],dp[i-1])
+ */
+ public static int rob(int[] nums){
+ if (nums == null || nums.length == 0){
+ return 0;
+ }
+ if (nums.length == 1){
+ return nums[0];
+ }
+ int[] dp = new int[nums.length];
+ dp[0] = nums[0];
+ dp[1] = nums[1];
+ for (int i = 2; i < nums.length; i++){
+ dp[i] = Math.max(dp[i-2]+nums[i],dp[i-1]);
+ }
+ return dp[nums.length-1];
+ }
+
+ @Test
+ public void test1(){
+ int[][] g = {{1,3,1},{1,5,1},{4,2,1}};
+ int i = minPathSum(g);
+ System.out.println(i);
+ }
+ @Test
+ public void test2(){
+ int[] a = {1,2,3,1};
+ int rob = rob(a);
+ System.out.println(rob);
+ }
+
+
+
+}
diff --git a/src/string/StringTest20201118.java b/src/string/StringTest20201118.java
new file mode 100644
index 0000000..c659525
--- /dev/null
+++ b/src/string/StringTest20201118.java
@@ -0,0 +1,102 @@
+package string;
+
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedList;
+
+/**
+ * @author :liubaosong
+ * @date :Created in 2020/11/18 9:48
+ * @description:算法之字符串
+ */
+public class StringTest20201118 {
+
+ /**
+ *
+ *
+ * @param s
+ */
+ public void reverseString(char[] s) {
+ if (s.length == 0){
+ return ;
+ }
+ int len = s.length;
+ for (int i = 0; i origin.length()){
+ return -1;
+ }
+ if (aim.length() == 0){
+ return 0;
+ }
+ //目标串index
+ int originIndex = 0;
+ //模式串index
+ int aimIndex = 0;
+ while (aimIndex < aim.length() ){
+ if (originIndex > origin.length() - 1){
+ return -1;
+ }
+ if (origin.charAt(originIndex) == aim.charAt(aimIndex)){
+ originIndex++;
+ aimIndex++;
+ } else {
+ //找到模式串在目标串的后一个index
+ int nextCharIndex = originIndex - aimIndex + aim.length();
+ if(nextCharIndex < origin.length()){
+ int step = aim.lastIndexOf(origin.charAt(nextCharIndex));
+ if (step == -1){
+ originIndex = nextCharIndex + 1;
+ }else {
+ originIndex = nextCharIndex - step;
+ }
+ aimIndex = 0;
+ }else {
+ return -1;
+ }
+ }
+
+ }
+ return originIndex - aimIndex;
+ }
+
+
+
+ @Test
+ public void test2(){
+ String origin = "aaaaa";
+ String aim = "bba";
+ int i = strStr(origin, aim);
+ System.out.println(i);
+ }
+}
diff --git a/src/tree/Bfs.java b/src/tree/Bfs.java
new file mode 100644
index 0000000..84610f3
--- /dev/null
+++ b/src/tree/Bfs.java
@@ -0,0 +1,101 @@
+package tree;
+
+
+import java.util.ArrayDeque;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Stack;
+
+/**
+ * @author :liubaosong
+ * @date :Created in 2020/9/24 15:11
+ * @description:BFs 二叉树广度优先
+ */
+public class Bfs {
+ private BianryTree bianryTree;
+
+ void setBianryTree(){
+ TreeNode root = new TreeNode(2);
+ TreeNode l1 = new TreeNode(1);
+ TreeNode r1 = new TreeNode(3);
+ root.setlNode(l1);
+ root.setrNode(r1);
+
+ bianryTree = new BianryTree();
+ bianryTree.setRoot(root);
+ }
+
+ List bfs(){
+ //定义返回的遍历二叉树数组
+ List list = new ArrayList<>();
+ //初始化二叉树
+ setBianryTree();
+ //利用双端对列 插入头部 消耗尾部 实现广度优先遍历
+ ArrayDeque arrayDeque = new ArrayDeque();
+ arrayDeque.push(bianryTree.root);
+ while (arrayDeque.size()>0){
+ int len = arrayDeque.size();
+ for (int i = 0;i dfs(){
+ //定义返回的TreeNode 集合
+ List list = new ArrayList<>();
+ Stack stack = new Stack<>();
+ stack.push(bianryTree.root);
+ while (!stack.empty()){
+ TreeNode node = stack.pop();
+ list.add(node);
+ if (node.rNode!=null){
+ stack.push(node.rNode);
+ }
+ if (node.lNode!=null){
+ stack.push(node.lNode);
+ }
+ }
+ return list;
+ }
+
+ boolean ValidBst(){
+ return helper(bianryTree.root,null,null);
+ }
+ boolean helper(TreeNode node,Integer lower,Integer upper){
+ if (node == null){
+ return true;
+ }
+ Integer val = node.value;
+ if (lower!=null&&val<=lower){
+ return false;
+ }
+ if (upper!=null&&val>=upper){
+ return false;
+ }
+ if (!helper(node.lNode,lower,val)){
+ return false;
+ }
+ if (!helper(node.rNode,val,upper)){
+ return false;
+ }
+ return true;
+
+ }
+
+ public static void main(String[] args) {
+ Bfs bfs = new Bfs();
+ bfs.setBianryTree();
+ boolean b = bfs.ValidBst();
+ System.out.println(b);
+ }
+
+}
diff --git a/src/tree/BianryTree.java b/src/tree/BianryTree.java
new file mode 100644
index 0000000..8830470
--- /dev/null
+++ b/src/tree/BianryTree.java
@@ -0,0 +1,15 @@
+package tree;
+
+/**
+ * @author liu
+ */
+public class BianryTree {
+ TreeNode root;
+
+ public void setRoot(TreeNode root){
+ this.root=root;
+ }
+ public TreeNode getRoot() {
+ return root;
+ }
+}
diff --git a/src/tree/TreeNode.java b/src/tree/TreeNode.java
new file mode 100644
index 0000000..2532404
--- /dev/null
+++ b/src/tree/TreeNode.java
@@ -0,0 +1,21 @@
+package tree;
+
+public class TreeNode {
+
+ int value;
+
+ TreeNode lNode;
+
+ TreeNode rNode;
+ public TreeNode(int value){
+ this.value=value;
+ }
+ public void setlNode(TreeNode lNode)
+ {
+ this.lNode=lNode;
+ }
+ public void setrNode(TreeNode rNode)
+ {
+ this.rNode=rNode;
+ }
+}