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 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - @@ -119,57 +229,50 @@ \ 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; + } +}