From cc7f175953ca89204d621ca9f0d5ced59a1b5f37 Mon Sep 17 00:00:00 2001 From: Ayden Date: Sat, 20 Jun 2020 12:08:41 -0400 Subject: [PATCH 1/4] Week 1 homework --- Week01/MergeTwoSortedArray.java | 25 ++++++++++++++++++++++ Week01/MergeTwoSortedArrayList.java | 32 +++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 Week01/MergeTwoSortedArray.java create mode 100644 Week01/MergeTwoSortedArrayList.java diff --git a/Week01/MergeTwoSortedArray.java b/Week01/MergeTwoSortedArray.java new file mode 100644 index 000000000..972a9f9f4 --- /dev/null +++ b/Week01/MergeTwoSortedArray.java @@ -0,0 +1,25 @@ +class Solution { + public void merge(int[] nums1, int m, int[] nums2, int n) { + int i = m - 1, j = n - 1, k = m + n - 1; + while(i >= 0 && j >= 0) { + if(nums1[i] == nums2[j]) { + nums1[k--] = nums1[i--]; + nums1[k--] = nums2[j--]; + } else if(nums1[i] > nums2[j]) { + nums1[k--] = nums1[i--]; + } else if(nums1[i] < nums2[j]) { + nums1[k--] = nums2[j--]; + } + } + if(i == -1) { + while(j >= 0) { + nums1[k--] = nums2[j--]; + } + } + if(j == -1) { + while(i >= 0) { + nums1[k--] = nums1[i--]; + } + } + } +} \ No newline at end of file diff --git a/Week01/MergeTwoSortedArrayList.java b/Week01/MergeTwoSortedArrayList.java new file mode 100644 index 000000000..ce4cbe766 --- /dev/null +++ b/Week01/MergeTwoSortedArrayList.java @@ -0,0 +1,32 @@ +/** + * Definition for singly-linked list. + * public class ListNode { + * int val; + * ListNode next; + * ListNode() {} + * ListNode(int val) { this.val = val; } + * ListNode(int val, ListNode next) { this.val = val; this.next = next; } + * } + */ +class Solution { + public ListNode mergeTwoLists(ListNode l1, ListNode l2) { + if(l1 != null && l2 == null) return l1; + else if(l1 == null && l2 != null) return l2; + else if(l1 == null && l2 == null) return null; + + if(l1.val == l2.val) { + ListNode next = mergeTwoLists(l1.next, l2.next); + l1.next = l2; + l2.next = next; + return l1; + } else if(l1.val < l2.val) { + ListNode next = mergeTwoLists(l1.next, l2); + l1.next = next; + return l1; + } else { + ListNode next = mergeTwoLists(l1, l2.next); + l2.next = next; + return l2; + } + } +} \ No newline at end of file From fe17840433c6f5a67e82bf7d5e69a739ee6975aa Mon Sep 17 00:00:00 2001 From: bcx20 Date: Sun, 21 Jun 2020 04:20:28 -0400 Subject: [PATCH 2/4] Week 2 homework submit --- .../BinaryTreeInorderTraversalIterative.java | 26 +++++++++++++++++++ .../BinaryTreeInorderTraversalRecursive.java | 23 ++++++++++++++++ .../BinaryTreePreorderTraversalIterative.java | 26 +++++++++++++++++++ .../BinaryTreePreorderTraversalRecursive.java | 23 ++++++++++++++++ 4 files changed, 98 insertions(+) create mode 100644 Week02/BinaryTreeInorderTraversalIterative.java create mode 100644 Week02/BinaryTreeInorderTraversalRecursive.java create mode 100644 Week02/BinaryTreePreorderTraversalIterative.java create mode 100644 Week02/BinaryTreePreorderTraversalRecursive.java diff --git a/Week02/BinaryTreeInorderTraversalIterative.java b/Week02/BinaryTreeInorderTraversalIterative.java new file mode 100644 index 000000000..3580a66d6 --- /dev/null +++ b/Week02/BinaryTreeInorderTraversalIterative.java @@ -0,0 +1,26 @@ +/** + * Definition for a binary tree node. + * public class TreeNode { + * int val; + * TreeNode left; + * TreeNode right; + * TreeNode(int x) { val = x; } + * } + */ +class Solution { + public List inorderTraversal(TreeNode root) { + List res = new ArrayList(); + Stack stk = new Stack(); + TreeNode currentNode = root; + while(currentNode != null || !stk.empty()) { + while(currentNode != null) { + stk.push(currentNode); + currentNode = currentNode.left; + } + currentNode = stk.pop(); + res.add(currentNode.val); + currentNode = currentNode.right; + } + return res; + } +} \ No newline at end of file diff --git a/Week02/BinaryTreeInorderTraversalRecursive.java b/Week02/BinaryTreeInorderTraversalRecursive.java new file mode 100644 index 000000000..801e3c752 --- /dev/null +++ b/Week02/BinaryTreeInorderTraversalRecursive.java @@ -0,0 +1,23 @@ +/** + * Definition for a binary tree node. + * public class TreeNode { + * int val; + * TreeNode left; + * TreeNode right; + * TreeNode(int x) { val = x; } + * } + */ +class Solution { + public List inorderTraversal(TreeNode root) { + List res = new ArrayList(); + this.traverse(res, root); + return res; + } + + public void traverse(List res, TreeNode root) { + if (root == null) return; + this.traverse(res, root.left); + res.add(root.val); + traverse(res, root.right); + } +} \ No newline at end of file diff --git a/Week02/BinaryTreePreorderTraversalIterative.java b/Week02/BinaryTreePreorderTraversalIterative.java new file mode 100644 index 000000000..5ce149b2b --- /dev/null +++ b/Week02/BinaryTreePreorderTraversalIterative.java @@ -0,0 +1,26 @@ +/** + * Definition for a binary tree node. + * public class TreeNode { + * int val; + * TreeNode left; + * TreeNode right; + * TreeNode(int x) { val = x; } + * } + */ +class Solution { + public List preorderTraversal(TreeNode root) { + List res = new ArrayList(); + Stack stk = new Stack(); + TreeNode currentNode = root; + while(currentNode != null || !stk.empty()) { + while(currentNode != null) { + res.add(currentNode.val); + stk.push(currentNode); + currentNode = currentNode.left; + } + currentNode = stk.pop(); + currentNode = currentNode.right; + } + return res; + } +} \ No newline at end of file diff --git a/Week02/BinaryTreePreorderTraversalRecursive.java b/Week02/BinaryTreePreorderTraversalRecursive.java new file mode 100644 index 000000000..65d632823 --- /dev/null +++ b/Week02/BinaryTreePreorderTraversalRecursive.java @@ -0,0 +1,23 @@ +/** + * Definition for a binary tree node. + * public class TreeNode { + * int val; + * TreeNode left; + * TreeNode right; + * TreeNode(int x) { val = x; } + * } + */ +class Solution { + public List preorderTraversal(TreeNode root) { + List res = new ArrayList(); + this.traverse(res, root); + return res; + } + + public void traverse(List res, TreeNode root) { + if(root == null) return; + res.add(root.val); + this.traverse(res, root.left); + this.traverse(res, root.right); + } +} \ No newline at end of file From 77da424407501ae70ae95e82308b9a4c6fa012c4 Mon Sep 17 00:00:00 2001 From: bcx20 Date: Sun, 21 Jun 2020 18:41:01 -0400 Subject: [PATCH 3/4] Week 1 min stack --- Week01/MinStack.java | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 Week01/MinStack.java diff --git a/Week01/MinStack.java b/Week01/MinStack.java new file mode 100644 index 000000000..02d744a67 --- /dev/null +++ b/Week01/MinStack.java @@ -0,0 +1,40 @@ +class MinStack { + private Stack stk; + private Stack minStk; + /** initialize your data structure here. */ + public MinStack() { + this.stk = new Stack(); + this.minStk = new Stack(); + } + + public void push(int x) { + this.stk.push(x); + if(this.minStk.empty() || x <= this.minStk.peek()) { + this.minStk.push(x); + } + } + + public void pop() { + if(this.stk.peek().equals(this.minStk.peek())) { + this.minStk.pop(); + } + this.stk.pop(); + } + + public int top() { + return this.stk.peek(); + } + + public int getMin() { + return this.minStk.peek(); + } +} + +/** + * Your MinStack object will be instantiated and called as such: + * MinStack obj = new MinStack(); + * obj.push(x); + * obj.pop(); + * int param_3 = obj.top(); + * int param_4 = obj.getMin(); + */ \ No newline at end of file From d042ae083fc2085792bcdc9f8eb9d96d1d642a61 Mon Sep 17 00:00:00 2001 From: bcx20 Date: Sat, 27 Jun 2020 16:49:11 -0400 Subject: [PATCH 4/4] week 3 homework submit --- Week01/NOTE.md | 2 +- ...ryTreeFromPreOrderAndInOrderTraversal.java | 35 +++++++++++++++++++ .../LowestCommonmAncestorOfaBinaryTree.java | 21 +++++++++++ Week03/NOTE.md | 3 +- 4 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 Week03/ConstructBinaryTreeFromPreOrderAndInOrderTraversal.java create mode 100644 Week03/LowestCommonmAncestorOfaBinaryTree.java diff --git a/Week01/NOTE.md b/Week01/NOTE.md index 50de30414..4f6b8afbb 100644 --- a/Week01/NOTE.md +++ b/Week01/NOTE.md @@ -1 +1 @@ -学习笔记 \ No newline at end of file +学习笔记 diff --git a/Week03/ConstructBinaryTreeFromPreOrderAndInOrderTraversal.java b/Week03/ConstructBinaryTreeFromPreOrderAndInOrderTraversal.java new file mode 100644 index 000000000..fd5176490 --- /dev/null +++ b/Week03/ConstructBinaryTreeFromPreOrderAndInOrderTraversal.java @@ -0,0 +1,35 @@ +/** + * Definition for a binary tree node. + * public class TreeNode { + * int val; + * TreeNode left; + * TreeNode right; + * TreeNode(int x) { val = x; } + * } + */ +class Solution { + public TreeNode buildTree(int[] preorder, int[] inorder) { + return this.recursive(preorder, 0, preorder.length, inorder, 0, inorder.length); + } + + public TreeNode recursive(int[] preorder, int pStart, int pEnd, int[] inorder, int iStart, int iEnd) { + if(pStart == pEnd) return null; + TreeNode root = new TreeNode(preorder[pStart]); + int rootIndexInInorder = findIndex(root.val, inorder); + int leftNodeCount = rootIndexInInorder - iStart; + root.left = recursive(preorder, pStart + 1, pStart + leftNodeCount + 1, inorder, iStart, rootIndexInInorder); + root.right = recursive(preorder, pStart + leftNodeCount + 1, pEnd, inorder, rootIndexInInorder + 1, iEnd); + return root; + } + + public int findIndex(int value, int[] targetArr) { + int res = 0; + for(int i = 0; i < targetArr.length; i++) { + if(targetArr[i] == value) { + res = i; + break; + } + } + return res; + } +} \ No newline at end of file diff --git a/Week03/LowestCommonmAncestorOfaBinaryTree.java b/Week03/LowestCommonmAncestorOfaBinaryTree.java new file mode 100644 index 000000000..a4f006429 --- /dev/null +++ b/Week03/LowestCommonmAncestorOfaBinaryTree.java @@ -0,0 +1,21 @@ +/** + * Definition for a binary tree node. + * public class TreeNode { + * int val; + * TreeNode left; + * TreeNode right; + * TreeNode(int x) { val = x; } + * } + */ +class Solution { + public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { + if(root == null) return null; + if(root.val == p.val || root.val == q.val) return root; + TreeNode left = lowestCommonAncestor(root.left, p, q); + TreeNode right = lowestCommonAncestor(root.right, p, q); + if(left != null && right != null) return root; + else if(left != null && right == null) return left; + else if(left == null && right != null) return right; + else return null; + } +} \ No newline at end of file diff --git a/Week03/NOTE.md b/Week03/NOTE.md index 50de30414..74aac9022 100644 --- a/Week03/NOTE.md +++ b/Week03/NOTE.md @@ -1 +1,2 @@ -学习笔记 \ No newline at end of file +学习笔记 +