diff --git a/src/com/blankj/concurrent/BoundedQueue.java b/src/com/blankj/concurrent/BoundedQueue.java new file mode 100644 index 00000000..7ee65b05 --- /dev/null +++ b/src/com/blankj/concurrent/BoundedQueue.java @@ -0,0 +1,69 @@ +package com.blankj.concurrent; +import java.util.LinkedList; +import java.util.concurrent.locks.Condition; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +/** + * Description: + * Copyright: Copyright (c) 2012 + * Company: keruyun Technology(Beijing) Chengdu Co. Ltd. + * + * @author huangjk + * @version 1.0 2020/9/22 + */ +public class BoundedQueue { + + private LinkedList buffer; //生产者容器 + private int maxSize ; //容器最大值是多少 + private Lock lock; + private Condition fullCondition; + private Condition notFullCondition; + BoundedQueue(int maxSize){ + this.maxSize = maxSize; + buffer = new LinkedList(); + lock = new ReentrantLock(); + fullCondition = lock.newCondition(); + notFullCondition = lock.newCondition(); + } + + /** + * 生产者 + * @param obj + * @throws InterruptedException + */ + public void put(Object obj) throws InterruptedException { + lock.lock(); //获取锁 + try { + while (maxSize == buffer.size()){ + System.out.println("满了,添加的线程进入等待状态"); + notFullCondition.await(); //满了,添加的线程进入等待状态 + } + buffer.add(obj); + fullCondition.signal(); //通知 + } finally { + lock.unlock(); + } + } + + /** + * 消费者 + * @return + * @throws InterruptedException + */ + public Object get() throws InterruptedException { + Object obj; + lock.lock(); + try { + while (buffer.size() == 0){ //队列中没有数据了 线程进入等待状态 + System.out.println("队列中没有数据了 线程进入等待状态"); + fullCondition.await(); + } + obj = buffer.poll(); + notFullCondition.signal(); //通知 + } finally { + lock.unlock(); + } + return obj; + } +} diff --git a/src/com/blankj/concurrent/BoundedQueueTest.java b/src/com/blankj/concurrent/BoundedQueueTest.java new file mode 100644 index 00000000..a66939f0 --- /dev/null +++ b/src/com/blankj/concurrent/BoundedQueueTest.java @@ -0,0 +1,38 @@ +package com.blankj.concurrent; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +/** + * Description: + * Copyright: Copyright (c) 2012 + * Company: keruyun Technology(Beijing) Chengdu Co. Ltd. + * + * @author huangjk + * @version 1.0 2020/9/22 + */ +public class BoundedQueueTest { + public static void main(String[] args) { + BoundedQueue boundedQueue = new BoundedQueue(5); + + ExecutorService executorService = Executors.newFixedThreadPool(2); + executorService.execute(()->{ + for (int i=0;i<10000;i++){ + try { + boundedQueue.put(new Object()); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + }); + executorService.execute(()->{ + for (int i=0;i<10000;i++){ + try { + boundedQueue.get(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + }); + } +} diff --git a/src/com/blankj/concurrent/ConditionUseCase.java b/src/com/blankj/concurrent/ConditionUseCase.java new file mode 100644 index 00000000..9994ff19 --- /dev/null +++ b/src/com/blankj/concurrent/ConditionUseCase.java @@ -0,0 +1,66 @@ +package com.blankj.concurrent; + + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.locks.Condition; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; +/** + * Description: + * Copyright: Copyright (c) 2012 + * Company: keruyun Technology(Beijing) Chengdu Co. Ltd. + * + * @author huangjk + * @version 1.0 2020/9/22 + */ +public class ConditionUseCase { + + public Lock lock = new ReentrantLock(); + public Condition condition = lock.newCondition(); + + public static void main(String[] args) { + ConditionUseCase useCase = new ConditionUseCase(); + ExecutorService executorService = Executors.newFixedThreadPool (2); + executorService.execute(new Runnable() { + @Override + public void run() { + useCase.conditionWait(); + } + }); + executorService.execute(new Runnable() { + @Override + public void run() { + useCase.conditionSignal(); + } + }); + } + + public void conditionWait() { + lock.lock(); + try { + System.out.println(Thread.currentThread().getName() + "拿到锁了"); + System.out.println(Thread.currentThread().getName() + "等待信号"); + condition.await(); + System.out.println(Thread.currentThread().getName() + "拿到信号"); + }catch (Exception e){ + + }finally { + lock.unlock(); + } + } + public void conditionSignal() { + lock.lock(); + try { + Thread.sleep(5000); + System.out.println(Thread.currentThread().getName() + "拿到锁了"); + condition.signal(); + System.out.println(Thread.currentThread().getName() + "发出信号"); + }catch (Exception e){ + + }finally { + lock.unlock(); + } + } + +} diff --git a/src/com/blankj/easy/_053/Kuai_shou_test.java b/src/com/blankj/easy/_053/Kuai_shou_test.java new file mode 100644 index 00000000..84e82356 --- /dev/null +++ b/src/com/blankj/easy/_053/Kuai_shou_test.java @@ -0,0 +1,25 @@ +package com.blankj.easy._053; + +/** + * Description: + * Copyright: Copyright (c) 2012 + * Company: keruyun Technology(Beijing) Chengdu Co. Ltd. + * + * @author huangjk + * @version 1.0 2020/4/3 + */ +public class Kuai_shou_test { + public static void main(String[] args) { + String a = "abc"; + for (int i=0;i 0 ? dp : 0); + if (dp > max) { + max = dp; + } + } + return max; + } } diff --git a/src/com/blankj/myself/AddTwoNumbers.java b/src/com/blankj/myself/AddTwoNumbers.java new file mode 100644 index 00000000..7bbe47f2 --- /dev/null +++ b/src/com/blankj/myself/AddTwoNumbers.java @@ -0,0 +1,47 @@ +package com.blankj.myself; + +import com.blankj.myself.HasCycle_fast_slow_point.ListNode; + +/** + * Description: + * Copyright: Copyright (c) 2012 + * Company: keruyun Technology(Beijing) Chengdu Co. Ltd. + * + * @author huangjk + * @version 1.0 2020/10/3 + */ +public class AddTwoNumbers { + + public ListNode addTwoNumbers(ListNode l1, ListNode l2) { + ListNode res = new ListNode(0); + ListNode curr = res; + int x,y,unit,carry=0; + while (l1!=null||l2!=null){ + x = (l1==null?0:l1.val); + y = (l2==null?0:l2.val); + + + unit = (x + y + carry)%10 ; + + curr.next = new ListNode(unit); + carry = (x + y + carry)/10; + + if(l1!=null){ + l1=l1.next; + } + + if(l2!=null){ + l2=l2.next; + } + + curr = curr.next; + + } + + if(carry!=0){ + curr.next = new ListNode(carry); + } + + return res.next; + } +} diff --git a/src/com/blankj/myself/ArrHeaderTailMax.java b/src/com/blankj/myself/ArrHeaderTailMax.java new file mode 100644 index 00000000..b08fee10 --- /dev/null +++ b/src/com/blankj/myself/ArrHeaderTailMax.java @@ -0,0 +1,95 @@ +package com.blankj.myself; + +/** + * Description: + * Copyright: Copyright (c) 2012 + * Company: keruyun Technology(Beijing) Chengdu Co. Ltd. + * + * @author huangjk + * @version 1.0 2020/9/28 + */ +public class ArrHeaderTailMax { + + public static int max(int[] a){ + int sum = 0; + for(int i=0;i1){ + int chooseNum = maxDetail(a,leftIndex+1,rightIndex,max)>maxDetail(a,leftIndex,rightIndex-1,max)? + a[rightIndex]:a[leftIndex]; + max = max + chooseNum; + return max; + }else { + return Math.max(a[leftIndex],a[rightIndex]); + } + } + + public static void main(String[] args) { + //int v[] = { 1, 2, 3, 6, 9, 5, 7, 4, 2, 6, 9, 5, 8, 7, 2, 1, 55, 3, 6, 9, 7, 5, 2 }; + int v[] = { 10, 70,3,2,8,900}; + + int n = max(v); + System.out.println(n); + + //System.out.println(max2_dync(v)); + } + + /** + * + * + * dp[i][j]=sum[i,j]-min(dp[i-1][j],dp[i][j-1]) + * @param b + * @return + */ + public static int max2_dync(int[] b){ + int n = b.length; + int[] a=new int[n+1]; + int[][] dp=new int[n+1][n+1]; + int[] sum=new int[n+1]; + for(int i=1;i<=n;i++){ + a[i]=b[i-1]; + sum[i]=sum[i-1]+a[i]; + dp[i][i]=a[i]; + } + + for(int i=n;i>0;i--){ + for(int j=i+1;j<=n;j++){ + dp[i][j]=sum[j]-sum[i-1]-Math.min(dp[i+1][j],dp[i][j-1]); + } + } + int first=dp[1][n]; + int second=sum[n]-first; + System.out.println(first+" "+second); + return first; + + } + + + + +} diff --git a/src/com/blankj/myself/ClimbStairs.java b/src/com/blankj/myself/ClimbStairs.java new file mode 100644 index 00000000..be00b65b --- /dev/null +++ b/src/com/blankj/myself/ClimbStairs.java @@ -0,0 +1,67 @@ +package com.blankj.myself; + +/** + * Description: + * Copyright: Copyright (c) 2012 + * Company: keruyun Technology(Beijing) Chengdu Co. Ltd. + * + * @author huangjk + * @version 1.0 2020/9/23 + */ +public class ClimbStairs { + public static void main(String[] args) { + ClimbStairs climbStairs = new ClimbStairs(); + System.out.println(System.currentTimeMillis()); + System.out.println(climbStairs.climbStairs(46)); + System.out.println(System.currentTimeMillis()); + + System.out.println("--------------------------"); + + System.out.println(System.currentTimeMillis()); + System.out.println(climbStairs.climbStairs2(46)); + System.out.println(System.currentTimeMillis()); + + System.out.println("--------------------------"); + System.out.println(System.currentTimeMillis()); + System.out.println(climbStairs.climbStairs3(46)); + System.out.println(System.currentTimeMillis()); + } + public int climbStairs(int n) { + if(n==1){ + return 1; + } + if(n==2){ + return 2; + } + return climbStairs(n-1)+climbStairs(n-2); + } + + public int climbStairs3(int n) { + int[] nums = new int[n]; + nums[0]=1; + nums[1]=2; + if(n==1){ + return 1; + } + if(n==2){ + return 2; + } + for (int i=2;i 1) { + // 意思是先选一个,然后求剩下数组对方先选获得的最大值,用sum减去对方获得的最大值,即是自己的最大值 + // 然后比较选头还是尾更好 + lmax = sum - act(a, sum - a[l], l + 1, r); + rmax = sum - act(a, sum - a[r], l, r - 1); + return lmax > rmax ? lmax : rmax; + } else {//剩下2个 + return a[l] > a[r] ? a[l] : a[r]; + } + + } + + public static void main(String[] args) { + int v[] = {1, 2, 3, 6, 9, 5, 7, 4, 2, 6, 9, 5, 8, 7, 2, 1, 55, 3, 6, 9, 7, 5, 2}; + int n = max(v, 0, v.length - 1); + System.out.println(n); + } +} diff --git a/src/com/blankj/myself/GetIntersectionNode_two_linklist.java b/src/com/blankj/myself/GetIntersectionNode_two_linklist.java new file mode 100644 index 00000000..c2371376 --- /dev/null +++ b/src/com/blankj/myself/GetIntersectionNode_two_linklist.java @@ -0,0 +1,23 @@ +package com.blankj.myself; + +import com.blankj.myself.HasCycle_fast_slow_point.ListNode; + +/** + * Description:leecode 160. 相交链表 + * Copyright: Copyright (c) 2012 + * Company: keruyun Technology(Beijing) Chengdu Co. Ltd. + * + * @author huangjk + * @version 1.0 2020/10/2 + */ +public class GetIntersectionNode_two_linklist { + public ListNode getIntersectionNode(ListNode headA, ListNode headB) { + ListNode pA = headA; + ListNode pB = headB; + while (pA!=pB){ + pA = pA==null?headB:pA.next; + pB = pB==null?headA:pB.next; + } + return pA; + } +} diff --git a/src/com/blankj/myself/GetKthFromEnd.java b/src/com/blankj/myself/GetKthFromEnd.java new file mode 100644 index 00000000..f5723fce --- /dev/null +++ b/src/com/blankj/myself/GetKthFromEnd.java @@ -0,0 +1,67 @@ +package com.blankj.myself; + +import com.blankj.myself.HasCycle_fast_slow_point.ListNode; + +/** + * Description: + * Copyright: Copyright (c) 2012 + * Company: keruyun Technology(Beijing) Chengdu Co. Ltd. + * + * @author huangjk + * @version 1.0 2020/10/3 + */ +public class GetKthFromEnd { + public static void main(String[] args) { + ListNode head = new ListNode(1); + ListNode tail = null; + + //head.next=new ListNode(2); + //head.next.next=new ListNode(3); + //head.next.next.next=new ListNode(4); + //head.next.next.next.next=new ListNode(5); + + for (int i=1;i<5;i++){ + if(tail==null){ + tail = new ListNode(i+1); + head.next = tail; + }else { + tail.next = new ListNode(i+1); + tail = tail.next; + } + + } + + GetKthFromEnd getKthFromEnd = new GetKthFromEnd(); + getKthFromEnd.getKthFromEnd(head,2); + + + } + + public ListNode getKthFromEnd(ListNode head, int k) { + int size = 0; + ListNode headSecond = head; + while(head!=null){ + head = head.next; + size = size + 1; + } + ListNode res = null; + ListNode temp = null; + int index = 0; + while(headSecond!=null){ + + index = index + 1; + if(size-k>>= 1; + } + return res; + + + } +} diff --git a/src/com/blankj/myself/HasCycle_fast_slow_point.java b/src/com/blankj/myself/HasCycle_fast_slow_point.java new file mode 100644 index 00000000..de831b30 --- /dev/null +++ b/src/com/blankj/myself/HasCycle_fast_slow_point.java @@ -0,0 +1,42 @@ +package com.blankj.myself; + +import java.util.HashSet; + +/** + * Description: + * Copyright: Copyright (c) 2012 + * Company: keruyun Technology(Beijing) Chengdu Co. Ltd. + * + * @author huangjk + * @version 1.0 2020/10/2 + */ +public class HasCycle_fast_slow_point { + + public boolean hasCycle(ListNode head) { + if(head==null||head.next==null){ + return false; + } + ListNode fast = head; + ListNode slow = head; + while (fast!=null&&fast.next!=null){ + + fast = fast.next.next; + slow = slow.next; + + if(fast == slow){ + return true; + } + + } + return false; + } + + static class ListNode { + int val; + ListNode next; + public ListNode(int x) { + val = x; + next = null; + } + } +} diff --git a/src/com/blankj/myself/HasCycle_hash.java b/src/com/blankj/myself/HasCycle_hash.java new file mode 100644 index 00000000..75ba70ba --- /dev/null +++ b/src/com/blankj/myself/HasCycle_hash.java @@ -0,0 +1,36 @@ +package com.blankj.myself; + +import java.util.HashSet; + +/** + * Description: + * Copyright: Copyright (c) 2012 + * Company: keruyun Technology(Beijing) Chengdu Co. Ltd. + * + * @author huangjk + * @version 1.0 2020/10/2 + */ +public class HasCycle_hash { + + public boolean hasCycle(ListNode head) { + HashSet hashSet = new HashSet<>(); + while (head!=null){ + if(hashSet.contains(head)){ + return true; + }else { + hashSet.add(head); + head = head.next; + } + } + return false; + } + + class ListNode { + int val; + ListNode next; + ListNode(int x) { + val = x; + next = null; + } + } +} diff --git a/src/com/blankj/myself/InorderTraversal.java b/src/com/blankj/myself/InorderTraversal.java new file mode 100644 index 00000000..e1326a56 --- /dev/null +++ b/src/com/blankj/myself/InorderTraversal.java @@ -0,0 +1,43 @@ +package com.blankj.myself; + +import java.util.ArrayList; +import java.util.List; + +/** + * Description: + * Copyright: Copyright (c) 2012 + * Company: keruyun Technology(Beijing) Chengdu Co. Ltd. + * + * @author huangjk + * @version 1.0 2020/9/14 + */ +public class InorderTraversal { + public static void main(String[] args) { + + } + + + public List inorderTraversal(TreeNode root) { + List list = new ArrayList<>(); + dfs(root,list); + return list; + } + + public void dfs(TreeNode root,List list) { + if(root==null){ + return; + } + dfs(root.left,list); + list.add(root.val); + dfs(root.right,list); + } + + + + public class TreeNode { + int val; + TreeNode left; + TreeNode right; + TreeNode(int x) { val = x; } + } +} diff --git a/src/com/blankj/myself/InorderTraversalByStack.java b/src/com/blankj/myself/InorderTraversalByStack.java new file mode 100644 index 00000000..e94eaa73 --- /dev/null +++ b/src/com/blankj/myself/InorderTraversalByStack.java @@ -0,0 +1,35 @@ +package com.blankj.myself; + +import java.util.ArrayList; +import java.util.List; +import java.util.Stack; + +import com.blankj.myself.InorderTraversal.TreeNode; + +/** + * Description: + * Copyright: Copyright (c) 2012 + * Company: keruyun Technology(Beijing) Chengdu Co. Ltd. + * + * @author huangjk + * @version 1.0 2020/9/14 + */ +public class InorderTraversalByStack { + + public List inorderTraversal(TreeNode root) { + List list = new ArrayList<>(); + Stack stack = new Stack(); + TreeNode curr = root; + while (curr!=null||!stack.isEmpty()){ + if(curr!=null){ + stack.push(curr.left); + curr = curr.left; + }else { + curr = (TreeNode) stack.pop(); + list.add(curr.val); + curr = curr.right; + } + } + return list; + } +} diff --git a/src/com/blankj/myself/IsPalindrome.java b/src/com/blankj/myself/IsPalindrome.java new file mode 100644 index 00000000..56a60f71 --- /dev/null +++ b/src/com/blankj/myself/IsPalindrome.java @@ -0,0 +1,27 @@ +package com.blankj.myself; + +/** + * Description: + * Copyright: Copyright (c) 2012 + * Company: keruyun Technology(Beijing) Chengdu Co. Ltd. + * + * @author huangjk + * @version 1.0 2020/9/21 + */ +public class IsPalindrome { + public static void main(String[] args) { + IsPalindrome isPalindrome = new IsPalindrome(); + System.out.println(isPalindrome.isPalindrome(1001)); + } + public boolean isPalindrome(int x) { + boolean isPalindrome = true; + String xStr = String.valueOf(x); + + for (int i=0;i=0; + } + + public int predictTheWinnerReal(int[] nums,int l,int r){ + if(l==r){ + return nums[l]; + } + int left = nums[l] - predictTheWinnerReal(nums,l+1,r); + int right = nums[r] - predictTheWinnerReal(nums,l,r-1); + + return Math.max(left,right); + } + +} diff --git a/src/com/blankj/myself/PredictTheWinner_Dp.java b/src/com/blankj/myself/PredictTheWinner_Dp.java new file mode 100644 index 00000000..7ef6370e --- /dev/null +++ b/src/com/blankj/myself/PredictTheWinner_Dp.java @@ -0,0 +1,37 @@ +package com.blankj.myself; + +/** + * Description: + * Copyright: Copyright (c) 2012 + * Company: keruyun Technology(Beijing) Chengdu Co. Ltd. + * + * @author huangjk + * @version 1.0 2020/10/1 + */ +public class PredictTheWinner_Dp { + public static void main(String[] args) { + int v[] = { 1, 2, 3, 6, 9, 5, 7, 4, 2, 6, 9, 5, 8, 7, 2, 1, 55, 3, 6, 9, 7, 5, 2 }; + PredictTheWinner_Dp predictTheWinner = new PredictTheWinner_Dp(); + System.out.println(predictTheWinner.PredictTheWinner(v)); + } + + public boolean PredictTheWinner(int[] nums) { + if(nums.length%2==0){ + return true; + } + + int[][] dp = new int[nums.length][nums.length]; + for(int i=0;i=0;i--){ + for (int j=i+1;j=0; + } + + +} diff --git a/src/com/blankj/myself/RebuildTree.java b/src/com/blankj/myself/RebuildTree.java new file mode 100644 index 00000000..385d477e --- /dev/null +++ b/src/com/blankj/myself/RebuildTree.java @@ -0,0 +1,45 @@ +package com.blankj.myself; + +import java.util.HashMap; +import java.util.Map; + +/** + * Description: + * Copyright: Copyright (c) 2012 + * Company: keruyun Technology(Beijing) Chengdu Co. Ltd. + * + * @author huangjk + * @version 1.0 2020/9/16 + */ +public class RebuildTree { + + + public TreeNode buildTree(int[] preorder, int[] inorder) { + Map indexMap = new HashMap(); + for (int i = 0; i < preorder.length; i++) { + indexMap.put(inorder[i],i); + } + return reBuildTree(0,0,inorder.length-1,preorder,inorder,indexMap); + } + + + public TreeNode reBuildTree(int preRootIndex, int inorderLeftIndex,int inorderRightIndex,int[] preorder, int[] inorder,Map indexMap) { + if(inorderLeftIndex>=inorderRightIndex){ + return null; + } + int index = (int)indexMap.get(preorder[preRootIndex]); + TreeNode treeNode = new TreeNode(preorder[preRootIndex]); + treeNode.left = reBuildTree(preRootIndex+1,inorderLeftIndex,index-1,preorder,inorder,indexMap); + treeNode.right = reBuildTree(preRootIndex+index-inorderLeftIndex+1,index+1,inorderRightIndex,preorder,inorder,indexMap); + return treeNode; + } + + + + public class TreeNode { + int val; + TreeNode left; + TreeNode right; + TreeNode(int x) { val = x; } + } +} diff --git a/src/com/blankj/myself/ReverseList.java b/src/com/blankj/myself/ReverseList.java new file mode 100644 index 00000000..552ee4bf --- /dev/null +++ b/src/com/blankj/myself/ReverseList.java @@ -0,0 +1,30 @@ +package com.blankj.myself; + +import java.util.Stack; + +import com.blankj.myself.HasCycle_fast_slow_point.ListNode; + +/** + * Description: + * Copyright: Copyright (c) 2012 + * Company: keruyun Technology(Beijing) Chengdu Co. Ltd. + * + * @author huangjk + * @version 1.0 2020/10/2 + */ +public class ReverseList { + + public ListNode reverseList(ListNode head) { + Stack stack = new Stack(); + while(head!=null){ + stack.push(head.val); + head = head.next; + } + ListNode listNode = new ListNode(stack.pop().intValue()); + while(!stack.isEmpty()){ + listNode.next = new ListNode(stack.pop().intValue()); + } + return listNode; + } + +} diff --git a/src/com/blankj/myself/RomanToInt.java b/src/com/blankj/myself/RomanToInt.java new file mode 100644 index 00000000..6d424252 --- /dev/null +++ b/src/com/blankj/myself/RomanToInt.java @@ -0,0 +1,41 @@ +package com.blankj.myself; + +/** + * Description: + * Copyright: Copyright (c) 2012 + * Company: keruyun Technology(Beijing) Chengdu Co. Ltd. + * + * @author huangjk + * @version 1.0 2020/9/21 + */ +public class RomanToInt { + public int romanToInt(String s) { + int sum = 0; + int pre = cast(s.charAt(0)); + for(int i=1;i=0;j--){ + if(j==0){ + nums[j] = temp; + }else{ + nums[j] = nums[j-1]; + } + } + } + //int[] temps = new int[k]; + //for(int i=nums.length-k;i<=nums.length-1;i++){ + // temps[i+k-nums.length]=nums[i]; + //} + //for(int j=nums.length-1;j>=0;j--){ + // if(j>=k){ + // nums[j]=nums[j-k]; + // }else{ + // nums[j]=temps[j]; + // } + //} + + } + +} diff --git a/src/com/blankj/myself/SkipLadder.java b/src/com/blankj/myself/SkipLadder.java new file mode 100644 index 00000000..2ec24814 --- /dev/null +++ b/src/com/blankj/myself/SkipLadder.java @@ -0,0 +1,28 @@ +package com.blankj.myself; + +/** + * Description: + * Copyright: Copyright (c) 2012 + * Company: keruyun Technology(Beijing) Chengdu Co. Ltd. + * + * @author huangjk + * @version 1.0 2020/5/20 + */ +public class SkipLadder { + public static void main(String[] args) { + + } + + public int climbStairs(int n) { + if(n==1){ + return 1; + } + int[] nums = new int[n]; + nums[0] = 1; + nums[1] = 2; + for (int i=2;i stack = new Stack<>(); + for(char a:s.toCharArray()){ + if(a=='('){ + stack.push(')'); + }else if(a=='['){ + stack.push(']'); + }else if(a=='{'){ + stack.push('}'); + }else { + if(stack.pop()!=a||stack.isEmpty()){ + return false; + } + } + } + return stack.isEmpty(); + } +} diff --git a/src/com/blankj/myself/StrStr.java b/src/com/blankj/myself/StrStr.java new file mode 100644 index 00000000..20150b99 --- /dev/null +++ b/src/com/blankj/myself/StrStr.java @@ -0,0 +1,38 @@ +package com.blankj.myself; + +import java.util.Objects; + +/** + * Description: + * Copyright: Copyright (c) 2012 + * Company: keruyun Technology(Beijing) Chengdu Co. Ltd. + * + * @author huangjk + * @version 1.0 2020/10/1 + */ +public class StrStr { + public static void main(String[] args) { + StrStr strStr = new StrStr(); + strStr.strStr("mississippi", + "issip"); + } + + public int strStr(String haystack, String needle) { + int hLen = haystack.length(); + int nLen = needle.length(); + + for (int i=0;i> threeSum(int[] nums) { + List> result = new ArrayList<>(); + Arrays.sort(nums); + int length = nums.length; + for(int k=0;k0){ + return result; + } + if(k>0&&nums[k]==nums[k-1]){ + continue; + } + int L=k+1; + int R=length-1; + while (L 0){ + R = R-1; + } + } + } + return result; + } +} diff --git a/src/com/blankj/myself/ThreeThreadPrint.java b/src/com/blankj/myself/ThreeThreadPrint.java new file mode 100644 index 00000000..72334df7 --- /dev/null +++ b/src/com/blankj/myself/ThreeThreadPrint.java @@ -0,0 +1,110 @@ +package com.blankj.myself; + +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.locks.Condition; +import java.util.concurrent.locks.ReentrantLock; + + +/** + * Description: + * Copyright: Copyright (c) 2012 + * Company: keruyun Technology(Beijing) Chengdu Co. Ltd. + * + * @author huangjk + * @version 1.0 2020/9/28 + */ +public class ThreeThreadPrint { + + public static void main(String[] args) throws InterruptedException { + String a = "sahjfhasjfhakjfhkjh"; + char[] arry = a.toCharArray(); + AtomicInteger index = new AtomicInteger(); + ReentrantLock lock = new ReentrantLock(); + Condition condition1 = lock.newCondition(); + Condition condition2 = lock.newCondition(); + Condition condition3 = lock.newCondition(); + + + new Thread(()->{ + Boolean finish = false; + + try { + + lock.lock(); + while (!finish) { + + System.out.println(Thread.currentThread().getName() + ": " + arry[index.getAndAdd(1)]); + condition2.signal(); + condition1.await(); + + if (index.get() > arry.length) { + finish = true; + } + } + + }catch (Exception e){ + + }finally { + lock.unlock(); + } + + }).start(); + + + new Thread(()->{ + Boolean finish = false; + + try { + lock.lock(); + while (!finish) { + System.out.println(Thread.currentThread().getName() + ": " + arry[index.getAndAdd(1)]); + + condition3.signal(); + condition2.await(); + + if (index.get() > arry.length) { + finish = true; + } + } + + }catch (Exception e){ + + }finally { + lock.unlock(); + } + + + + }).start(); + + new Thread(()->{ + Boolean finish = false; + + try { + lock.lock(); + while (!finish) { + System.out.println(Thread.currentThread().getName() + ": " + arry[index.getAndAdd(1)]); + + condition1.signal(); + condition3.await(); + + if (index.get() > arry.length) { + finish = true; + } + } + + }catch (Exception e){ + + }finally { + lock.unlock(); + } + + + + }).start(); + + + Thread.sleep(100000); + } + +} diff --git a/src/com/blankj/myself/TreeBFS.java b/src/com/blankj/myself/TreeBFS.java new file mode 100644 index 00000000..00ad8f64 --- /dev/null +++ b/src/com/blankj/myself/TreeBFS.java @@ -0,0 +1,46 @@ +package com.blankj.myself; + +import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.List; + +import com.blankj.myself.InorderTraversal.TreeNode; + +/** + * Description: + * Copyright: Copyright (c) 2012 + * Company: keruyun Technology(Beijing) Chengdu Co. Ltd. + * + * @author huangjk + * @version 1.0 2020/10/3 + */ +public class TreeBFS { + public List> levelOrder(TreeNode root) { + List> res = new ArrayList<>(); + if(root==null){ + return res; + } + ArrayDeque queue = new ArrayDeque(); + queue.add(root); + + while (queue.peek()!=null){ + List temp = new ArrayList<>(); + int size = queue.size(); + for (int i=0;i stack = new Stack<>(); + TreeNode result = null; + if(Objects.nonNull(p.right)){ + result = p.right; + while (Objects.nonNull(result.left)){ + result = result.left; + } + }else { + stack.add(root); + TreeNode temp = root; + Boolean findFlag = false; + while (!findFlag){ + if(p.val>temp.val){ + temp = temp.right; + stack.add(temp); + + }else if(p.val0&&!findFlag){ + TreeNode parent = stack.pop(); + if(child == parent.left){ + result = parent; + findFlag = true; + }else { + child = parent; + } + } + + } + return result; + } + + public class TreeNode { + int val; + TreeNode left; + TreeNode right; + TreeNode(int x) { val = x; } + } +} diff --git a/src/com/blankj/myself/TwoThreadPrint.java b/src/com/blankj/myself/TwoThreadPrint.java new file mode 100644 index 00000000..ebaa2872 --- /dev/null +++ b/src/com/blankj/myself/TwoThreadPrint.java @@ -0,0 +1,86 @@ +package com.blankj.myself; + +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.locks.Condition; +import java.util.concurrent.locks.ReentrantLock; + +/** + * Description: + * Copyright: Copyright (c) 2012 + * Company: keruyun Technology(Beijing) Chengdu Co. Ltd. + * + * @author huangjk + * @version 1.0 2020/9/28 + */ +public class TwoThreadPrint { + + public static void main(String[] args) throws InterruptedException { + String a = "sahjfhasjfhakjfhkjhk"; + char[] arry = a.toCharArray(); + AtomicInteger index = new AtomicInteger(); + ReentrantLock lock = new ReentrantLock(); + Condition condition1 = lock.newCondition(); + Condition condition2 = lock.newCondition(); + + + new Thread(()->{ + Boolean finish = false; + + try { + + lock.lock(); + while (!finish) { + + System.out.println(Thread.currentThread().getName() + ": " + arry[index.getAndAdd(1)]); + condition2.signal(); + condition1.await(); + + if (index.get() > arry.length) { + finish = true; + } + } + + }catch (Exception e){ + + }finally { + condition2.signal(); + System.out.println("11111"); + lock.unlock(); + } + + }).start(); + + + new Thread(()->{ + Boolean finish = false; + + try { + lock.lock(); + while (!finish) { + System.out.println(Thread.currentThread().getName() + ": " + arry[index.getAndAdd(1)]); + + condition1.signal(); + condition2.await(); + + if (index.get() > arry.length) { + finish = true; + } + } + + }catch (Exception e){ + + }finally { + condition1.signal(); + System.out.println("22222"); + lock.unlock(); + } + + + + }).start(); + + + + } + +}