From 77a8d01dbf6fd7e0598bd7a3034f060381a71ee9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=99=94?= <33426301+wuliaode@users.noreply.github.com> Date: Sun, 7 Mar 2021 23:44:44 +0800 Subject: [PATCH 01/23] Update README.md --- .../README.md" | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git "a/Week_\346\257\225\344\270\232\346\200\273\347\273\223/README.md" "b/Week_\346\257\225\344\270\232\346\200\273\347\273\223/README.md" index 50de304..8bd4139 100644 --- "a/Week_\346\257\225\344\270\232\346\200\273\347\273\223/README.md" +++ "b/Week_\346\257\225\344\270\232\346\200\273\347\273\223/README.md" @@ -1 +1,17 @@ -学习笔记 \ No newline at end of file +8周的算法训练营,收获很大 +1:锻炼了学习方法 +2:对算法、数据结构有了一个全面的认识 +3:知识进一步巩固和掌握 + +数据结构认识 +一维 +基础: 数组 array (string),链表 linked list +高级: 栈 stack,队列 queue,双端队列 deque,集合 set,映射 map (hash or map),etc +二维 +基础: 树 tree,图 graph +高级: 二叉搜索树 binary search tree (red-black tree,AVL),堆 heap,并查集 disjoint set,字典树 Trie,etc + +学习要点 +1:五毒神掌 +2:刻意练习 - 练习缺陷弱点地方 +3:反馈 - 看题解、看国际版的高票回答 From f7125b0ace2f88488fe59763e20ede4cd019e474 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=99=94?= <33426301+wuliaode@users.noreply.github.com> Date: Mon, 8 Mar 2021 00:39:27 +0800 Subject: [PATCH 02/23] Create homework.java --- Week_01/homework.java | 1 + 1 file changed, 1 insertion(+) create mode 100644 Week_01/homework.java diff --git a/Week_01/homework.java b/Week_01/homework.java new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/Week_01/homework.java @@ -0,0 +1 @@ + From 322bdb0f355aa8767ba09ef9b55bdeca32a76324 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=99=94?= <33426301+wuliaode@users.noreply.github.com> Date: Mon, 8 Mar 2021 00:43:53 +0800 Subject: [PATCH 03/23] Update homework.java --- Week_01/homework.java | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/Week_01/homework.java b/Week_01/homework.java index 8b13789..f7c4a62 100644 --- a/Week_01/homework.java +++ b/Week_01/homework.java @@ -1 +1,22 @@ +//242. 有效的字母异位词 +class Solution { + public boolean isAnagram(String s, String t) { + if (s.length() != t.length()) { + return false; + } + Map table = new HashMap(); + for (int i = 0; i < s.length(); i++) { + char ch = s.charAt(i); + table.put(ch, table.getOrDefault(ch, 0) + 1); + } + for (int i = 0; i < t.length(); i++) { + char ch = t.charAt(i); + table.put(ch, table.getOrDefault(ch, 0) - 1); + if (table.get(ch) < 0) { + return false; + } + } + return true; + } +} From e0af916b86b78fe27465ea8b75d4fd129d845e30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=99=94?= <33426301+wuliaode@users.noreply.github.com> Date: Mon, 8 Mar 2021 00:44:14 +0800 Subject: [PATCH 04/23] Rename homework.java to homework1.java --- Week_01/{homework.java => homework1.java} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Week_01/{homework.java => homework1.java} (100%) diff --git a/Week_01/homework.java b/Week_01/homework1.java similarity index 100% rename from Week_01/homework.java rename to Week_01/homework1.java From e02d9cbf4ce26bef1ff5b6c803a86359aece896d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=99=94?= <33426301+wuliaode@users.noreply.github.com> Date: Mon, 8 Mar 2021 00:44:47 +0800 Subject: [PATCH 05/23] Create homework2.java --- Week_01/homework2.java | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Week_01/homework2.java diff --git a/Week_01/homework2.java b/Week_01/homework2.java new file mode 100644 index 0000000..0b7972b --- /dev/null +++ b/Week_01/homework2.java @@ -0,0 +1,26 @@ +//49. 字母异位词分组 +class Solution { + public List> groupAnagrams(String[] strs) { + Map> map = new HashMap>(); + for (String str : strs) { + int[] counts = new int[26]; + int length = str.length(); + for (int i = 0; i < length; i++) { + counts[str.charAt(i) - 'a']++; + } + + StringBuffer sb = new StringBuffer(); + for (int i = 0; i < 26; i++) { + if (counts[i] != 0) { + sb.append((char) ('a' + i)); + sb.append(counts[i]); + } + } + String key = sb.toString(); + List list = map.getOrDefault(key, new ArrayList()); + list.add(str); + map.put(key, list); + } + return new ArrayList>(map.values()); + } +} From 6d63c53d63993de5b51344abe3a883a6e4e6fb61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=99=94?= <33426301+wuliaode@users.noreply.github.com> Date: Mon, 8 Mar 2021 00:46:59 +0800 Subject: [PATCH 06/23] Create homework1.java --- Week_02/homework1.java | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 Week_02/homework1.java diff --git a/Week_02/homework1.java b/Week_02/homework1.java new file mode 100644 index 0000000..2648fd2 --- /dev/null +++ b/Week_02/homework1.java @@ -0,0 +1,21 @@ +//242. 有效的字母异位词 +class Solution { + public boolean isAnagram(String s, String t) { + if (s.length() != t.length()) { + return false; + } + Map table = new HashMap(); + for (int i = 0; i < s.length(); i++) { + char ch = s.charAt(i); + table.put(ch, table.getOrDefault(ch, 0) + 1); + } + for (int i = 0; i < t.length(); i++) { + char ch = t.charAt(i); + table.put(ch, table.getOrDefault(ch, 0) - 1); + if (table.get(ch) < 0) { + return false; + } + } + return true; + } +} From 496c75bc263c25ab76b08fcaf59ca9c9439a843b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=99=94?= <33426301+wuliaode@users.noreply.github.com> Date: Mon, 8 Mar 2021 00:47:15 +0800 Subject: [PATCH 07/23] Create homework2.java --- Week_02/homework2.java | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Week_02/homework2.java diff --git a/Week_02/homework2.java b/Week_02/homework2.java new file mode 100644 index 0000000..0b7972b --- /dev/null +++ b/Week_02/homework2.java @@ -0,0 +1,26 @@ +//49. 字母异位词分组 +class Solution { + public List> groupAnagrams(String[] strs) { + Map> map = new HashMap>(); + for (String str : strs) { + int[] counts = new int[26]; + int length = str.length(); + for (int i = 0; i < length; i++) { + counts[str.charAt(i) - 'a']++; + } + + StringBuffer sb = new StringBuffer(); + for (int i = 0; i < 26; i++) { + if (counts[i] != 0) { + sb.append((char) ('a' + i)); + sb.append(counts[i]); + } + } + String key = sb.toString(); + List list = map.getOrDefault(key, new ArrayList()); + list.add(str); + map.put(key, list); + } + return new ArrayList>(map.values()); + } +} From 09c8742e8f3ed16d9c39e075da169b9e21fdde55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=99=94?= <33426301+wuliaode@users.noreply.github.com> Date: Mon, 8 Mar 2021 00:54:29 +0800 Subject: [PATCH 08/23] Delete homework1.java --- Week_01/homework1.java | 22 ---------------------- 1 file changed, 22 deletions(-) delete mode 100644 Week_01/homework1.java diff --git a/Week_01/homework1.java b/Week_01/homework1.java deleted file mode 100644 index f7c4a62..0000000 --- a/Week_01/homework1.java +++ /dev/null @@ -1,22 +0,0 @@ -//242. 有效的字母异位词 -class Solution { - public boolean isAnagram(String s, String t) { - if (s.length() != t.length()) { - return false; - } - Map table = new HashMap(); - for (int i = 0; i < s.length(); i++) { - char ch = s.charAt(i); - table.put(ch, table.getOrDefault(ch, 0) + 1); - } - for (int i = 0; i < t.length(); i++) { - char ch = t.charAt(i); - table.put(ch, table.getOrDefault(ch, 0) - 1); - if (table.get(ch) < 0) { - return false; - } - } - return true; - } -} - From 020088a868d3f57847a05076cfca58bb41b4400e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=99=94?= <33426301+wuliaode@users.noreply.github.com> Date: Mon, 8 Mar 2021 00:54:36 +0800 Subject: [PATCH 09/23] Delete homework2.java --- Week_01/homework2.java | 26 -------------------------- 1 file changed, 26 deletions(-) delete mode 100644 Week_01/homework2.java diff --git a/Week_01/homework2.java b/Week_01/homework2.java deleted file mode 100644 index 0b7972b..0000000 --- a/Week_01/homework2.java +++ /dev/null @@ -1,26 +0,0 @@ -//49. 字母异位词分组 -class Solution { - public List> groupAnagrams(String[] strs) { - Map> map = new HashMap>(); - for (String str : strs) { - int[] counts = new int[26]; - int length = str.length(); - for (int i = 0; i < length; i++) { - counts[str.charAt(i) - 'a']++; - } - - StringBuffer sb = new StringBuffer(); - for (int i = 0; i < 26; i++) { - if (counts[i] != 0) { - sb.append((char) ('a' + i)); - sb.append(counts[i]); - } - } - String key = sb.toString(); - List list = map.getOrDefault(key, new ArrayList()); - list.add(str); - map.put(key, list); - } - return new ArrayList>(map.values()); - } -} From ee12a47927c8cc6a394729ea1f32a9f60751bae3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=99=94?= <33426301+wuliaode@users.noreply.github.com> Date: Mon, 8 Mar 2021 00:55:09 +0800 Subject: [PATCH 10/23] Create homework1.java --- Week_03/homework1.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Week_03/homework1.java diff --git a/Week_03/homework1.java b/Week_03/homework1.java new file mode 100644 index 0000000..018680f --- /dev/null +++ b/Week_03/homework1.java @@ -0,0 +1,14 @@ +//236. 二叉树的最近公共祖先 +class Solution { + public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { + if(root==null)return null; + if(root==p||root==q)return root; + TreeNode left=lowestCommonAncestor(root.left,p,q); + TreeNode right=lowestCommonAncestor(root.right,p,q); + if(left!=null&&right!=null)return root; + if(left!=null)return left; + if(right!=null)return right; + return null; + } +} + From b27a43edbbb4637f43c5d01632ddbf7faa10124e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=99=94?= <33426301+wuliaode@users.noreply.github.com> Date: Mon, 8 Mar 2021 00:56:39 +0800 Subject: [PATCH 11/23] Create homework2.java --- Week_03/homework2.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Week_03/homework2.java diff --git a/Week_03/homework2.java b/Week_03/homework2.java new file mode 100644 index 0000000..b406a95 --- /dev/null +++ b/Week_03/homework2.java @@ -0,0 +1,15 @@ + //105. 从前序与中序遍历序列构造二叉树 +class Solution { + public TreeNode buildTree(int[] preorder, int[] inorder) { + return create(preorder,0,preorder.length-1,inorder,0,inorder.length-1); + } + public TreeNode create(int[] preorder,int l1,int r1,int[] inorder,int l2,int r2){ + if(l1>r1) return null; + int val = preorder[l1], i=0; + TreeNode node = new TreeNode(val); + while(inorder[l2+i]!=val) i++; + node.left = create(preorder,l1+1,l1+i,inorder,l2,l2+i-1); + node.right = create(preorder,l1+i+1,r1,inorder,l2+i+1,+r2); + return node; + } +} From ed315b22d51ebe061c4b404f5bf377f92f07ee65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=99=94?= <33426301+wuliaode@users.noreply.github.com> Date: Mon, 8 Mar 2021 01:03:44 +0800 Subject: [PATCH 12/23] Create homework1.java --- Week_04/homework1.java | 66 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 Week_04/homework1.java diff --git a/Week_04/homework1.java b/Week_04/homework1.java new file mode 100644 index 0000000..4280690 --- /dev/null +++ b/Week_04/homework1.java @@ -0,0 +1,66 @@ +//127. 单词接龙 +public class Solution { + + public int ladderLength(String beginWord, String endWord, List wordList) { + + Set wordSet = new HashSet<>(wordList); + if (wordSet.size() == 0 || !wordSet.contains(endWord)) { + return 0; + } + + Set visited = new HashSet<>(); + Set beginVisited = new HashSet<>(); + beginVisited.add(beginWord); + Set endVisited = new HashSet<>(); + endVisited.add(endWord); + + int step = 1; + while (!beginVisited.isEmpty() && !endVisited.isEmpty()) { + if (beginVisited.size() > endVisited.size()) { + Set temp = beginVisited; + beginVisited = endVisited; + endVisited = temp; + } + + + Set nextLevelVisited = new HashSet<>(); + for (String word : beginVisited) { + if (changeWordEveryOneLetter(word, endVisited, visited, wordSet, nextLevelVisited)) { + return step + 1; + } + } + beginVisited = nextLevelVisited; + step++; + } + return 0; + } + + private boolean changeWordEveryOneLetter(String word, Set endVisited, + Set visited, + Set wordSet, + Set nextLevelVisited) { + char[] charArray = word.toCharArray(); + for (int i = 0; i < word.length(); i++) { + char originChar = charArray[i]; + for (char c = 'a'; c <= 'z'; c++) { + if (originChar == c) { + continue; + } + charArray[i] = c; + String nextWord = String.valueOf(charArray); + if (wordSet.contains(nextWord)) { + if (endVisited.contains(nextWord)) { + return true; + } + if (!visited.contains(nextWord)) { + nextLevelVisited.add(nextWord); + visited.add(nextWord); + } + } + } + + charArray[i] = originChar; + } + return false; + } +} From 8f3cccbab268242fec55c446c614b210de64c1f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=99=94?= <33426301+wuliaode@users.noreply.github.com> Date: Mon, 8 Mar 2021 01:06:48 +0800 Subject: [PATCH 13/23] Create homework2.java --- Week_04/homework2.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Week_04/homework2.java diff --git a/Week_04/homework2.java b/Week_04/homework2.java new file mode 100644 index 0000000..1741029 --- /dev/null +++ b/Week_04/homework2.java @@ -0,0 +1,18 @@ +//55. 跳跃游戏 +class Solution { + public boolean canJump(int[] nums) { + + int minFlag = nums.length-1; + for (int i = nums.length - 2; i >= 1; i--) { + + if(i+nums[i]>=minFlag){ + minFlag = i; + } + } + + if(nums[0]>=minFlag) { + return true; + } + return false; + } +} From de7494dccf11258a54b8764b99c325b28f001f76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=99=94?= <33426301+wuliaode@users.noreply.github.com> Date: Mon, 8 Mar 2021 01:10:40 +0800 Subject: [PATCH 14/23] Create homework1.java --- Week_06/homework1.java | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Week_06/homework1.java diff --git a/Week_06/homework1.java b/Week_06/homework1.java new file mode 100644 index 0000000..ad6bf35 --- /dev/null +++ b/Week_06/homework1.java @@ -0,0 +1,28 @@ +//64. 最小路径和 + +class Solution { + private int M; + private int N; + private int[][] memo; + public int minPathSum(int[][] grid) { + M = grid.length; + N = grid[0].length; + memo = new int[M][N]; + for (int i = 0; i < M; i++) { + Arrays.fill(memo[i], -1); + } + return dfs(grid, 0, 0); + } + + private int dfs(int[][] grid, int r, int c) { + + if (r < 0 || r >= M || c < 0 || c >= N) return Integer.MAX_VALUE; + if (memo[r][c] > -1) return memo[r][c]; + if (r == M - 1 && c== N - 1) return grid[M - 1][N - 1]; + int right = dfs(grid, r, c + 1); + int down = dfs(grid, r + 1, c); + int ans = Math.min(right, down) + grid[r][c]; + memo[r][c] = ans; + return ans; + } +} From 3482fb024bb32bc22caf0cf78d28a7ccc976360e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=99=94?= <33426301+wuliaode@users.noreply.github.com> Date: Mon, 8 Mar 2021 01:11:43 +0800 Subject: [PATCH 15/23] Create homework2.java --- Week_06/homework2.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Week_06/homework2.java diff --git a/Week_06/homework2.java b/Week_06/homework2.java new file mode 100644 index 0000000..57b597a --- /dev/null +++ b/Week_06/homework2.java @@ -0,0 +1,18 @@ +//32. 最长有效括号 + +class Solution { + public int longestValidParentheses(String s) { + char[] str = s.toCharArray(); + int[] dp = new int[str.length]; + int max = 0; + for (int i = 0; i < str.length; i++) { + if(str[i] == '(') dp[i] = 0; + else if(i > 0) { + if(str[i - 1] == '(') dp[i] = i - 2 >= 0? dp[i - 2] + 2 : 2; + else if(i - dp[i - 1] - 1 >= 0 && str[i - dp[i - 1] - 1] == '(') dp[i] = i - dp[i - 1] - 2 >= 0 ? dp[i - 1] + 2 + dp[i - dp[i - 1] - 2] : dp[i - 1] + 2; + }else dp[i] = 0; + max = Math.max(max, dp[i]); + } + return max; + } +} From e3df7d9fb1e6e206085d6eb21bd9d36b1e82a691 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=99=94?= <33426301+wuliaode@users.noreply.github.com> Date: Mon, 8 Mar 2021 01:15:22 +0800 Subject: [PATCH 16/23] Create homework1.java --- Week_07/homework1.java | 63 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 Week_07/homework1.java diff --git a/Week_07/homework1.java b/Week_07/homework1.java new file mode 100644 index 0000000..58a014b --- /dev/null +++ b/Week_07/homework1.java @@ -0,0 +1,63 @@ +//208. 实现 Trie (前缀树) + +class Trie { + + class TrieNode { + private int v; + boolean end; + TrieNode[] next = new TrieNode[26]; + + TrieNode(char ch) { + v = 1 << (ch - 'a'); + } + + TrieNode add(char ch) { + int k = ch - 'a'; + if (next[k] != null) { + next[k].v |= 1 << k; + } else { + next[k] = new TrieNode((ch)); + } + return next[k]; + } + + TrieNode get(char ch) { + return next[ch - 'a']; + } + } + + TrieNode root = new TrieNode('a'); + + public Trie() {} + + public void insert(String word) { + TrieNode p = root; + for (char c : word.toCharArray()) { + p = p.add(c); + } + p.end = true; + } + + public boolean search(String word) { + TrieNode p = root; + for (char c : word.toCharArray()) { + p = p.get(c); + if (p == null) { + return false; + } + } + return p.end; + } + + + public boolean startsWith(String prefix) { + TrieNode p = root; + for (char c : prefix.toCharArray()) { + p = p.get(c); + if (p == null) { + return false; + } + } + return true; + } +} From 027945f0fb97b3e353303b55cc2a6d8339fa0335 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=99=94?= <33426301+wuliaode@users.noreply.github.com> Date: Mon, 8 Mar 2021 01:25:29 +0800 Subject: [PATCH 17/23] Create homework2.java --- Week_07/homework2.java | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 Week_07/homework2.java diff --git a/Week_07/homework2.java b/Week_07/homework2.java new file mode 100644 index 0000000..ca16593 --- /dev/null +++ b/Week_07/homework2.java @@ -0,0 +1,34 @@ + //200. 岛屿数量 + +class Solution { + private int M; + private int N; + + private void dfs(char[][] grid, int i, int j) { + if (i < 0 || j < 0 || i == M || j == N || grid[i][j] == '0') { + return; + } + grid[i][j] = '0'; + dfs(grid, i + 1, j); + dfs(grid, i - 1, j); + dfs(grid, i, j + 1); + dfs(grid, i, j - 1); + } + + public int numIslands(char[][] grid) { + int res = 0; + if (grid.length == 0) return res; + + this.M = grid.length; + this.N = grid[0].length; + for (int i = 0; i < M; i++) { + for (int j = 0; j < N; j++) { + if (grid[i][j] == '1') { + dfs(grid, i, j); + res++; + } + } + } + return res; + } +} From fbb47a1e85ce3e2f96516bc9f28d419db55930b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=99=94?= <33426301+wuliaode@users.noreply.github.com> Date: Mon, 8 Mar 2021 01:29:41 +0800 Subject: [PATCH 18/23] Create homework1.java --- Week_08/homework1.java | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 Week_08/homework1.java diff --git a/Week_08/homework1.java b/Week_08/homework1.java new file mode 100644 index 0000000..dd1c74a --- /dev/null +++ b/Week_08/homework1.java @@ -0,0 +1,38 @@ +//56. 合并区间 + + +public class Solution { + + public int[][] merge(int[][] intervals) { + int len = intervals.length; + if (len < 2) { + return intervals; + } + Arrays.sort(intervals, Comparator.comparingInt(o -> o[0])); + + List res = new ArrayList<>(); + res.add(intervals[0]); + + for (int i = 1; i < len; i++) { + int[] curInterval = intervals[i]; + int[] peek = res.get(res.size() - 1); + if (curInterval[0] > peek[1]) { + res.add(curInterval); + } else { + + peek[1] = Math.max(curInterval[1], peek[1]); + } + } + return res.toArray(new int[res.size()][]); + } + + public static void main(String[] args) { + Solution solution = new Solution(); + int[][] intervals = {{1, 3}, {2, 6}, {8, 10}, {15, 18}}; + int[][] res = solution.merge(intervals); + for (int i = 0; i < res.length; i++) { + System.out.println(Arrays.toString(res[i])); + } + } +} + From d71a6db77bfdd9e2cd28ebbc299c86a7684a0f20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=99=94?= <33426301+wuliaode@users.noreply.github.com> Date: Mon, 8 Mar 2021 01:31:46 +0800 Subject: [PATCH 19/23] Create homework2.java --- Week_08/homework2.java | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Week_08/homework2.java diff --git a/Week_08/homework2.java b/Week_08/homework2.java new file mode 100644 index 0000000..b9d63ea --- /dev/null +++ b/Week_08/homework2.java @@ -0,0 +1,26 @@ +//1122. 数组的相对排序 + +class Solution { + public int[] relativeSortArray(int[] arr1, int[] arr2) { + int[] tmp=new int [1001]; + int n=arr1.length; + for(int num:arr1){ + tmp[num]++; + } + int pos=0; + for(int num:arr2){ + while(tmp[num]>0){ + arr1[pos++]=num; + tmp[num]--; + } + } + for(int i=0;i<1001;++i){ + while(tmp[i]>0){ + arr1[pos++]=i; + tmp[i]--; + } + } + return arr1; + } +} + From 87efbc449944ba809b3ee4614c9d9b7e9b4a4aec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=99=94?= <33426301+wuliaode@users.noreply.github.com> Date: Mon, 8 Mar 2021 01:37:34 +0800 Subject: [PATCH 20/23] Create homework1.java --- Week_09/homework1.java | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 Week_09/homework1.java diff --git a/Week_09/homework1.java b/Week_09/homework1.java new file mode 100644 index 0000000..c25466b --- /dev/null +++ b/Week_09/homework1.java @@ -0,0 +1,38 @@ +//438. 找到字符串中所有字母异位词 + +class Solution { + public List findAnagrams(String s, String p) { + if(s == null || s.length() == 0) return new ArrayList<>(); + List res = new ArrayList<>(); + int[] needs = new int[26]; + int[] window = new int[26]; + int left = 0, right = 0, total = p.length(); + for(char ch : p.toCharArray()){ + needs[ch - 'a'] ++; + } + while(right < s.length()){ + char chr = s.charAt(right); + if(needs[chr - 'a'] > 0){ + window[chr - 'a'] ++; + if(window[chr - 'a'] <= needs[chr - 'a']){ + total --; + } + } + while(total == 0){ + if(right-left+1 == p.length()){ + res.add(left); + } + char chl = s.charAt(left); + if(needs[chl - 'a'] > 0){ + window[chl - 'a'] --; + if(window[chl - 'a'] < needs[chl - 'a']){ + total ++; + } + } + left ++; + } + right ++; + } + return res; + } +} From e9b7de64730eb7e68337017cc1d3049f828bbb3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=99=94?= <33426301+wuliaode@users.noreply.github.com> Date: Mon, 8 Mar 2021 01:38:08 +0800 Subject: [PATCH 21/23] Create homework2.java --- Week_09/homework2.java | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Week_09/homework2.java diff --git a/Week_09/homework2.java b/Week_09/homework2.java new file mode 100644 index 0000000..11ac89a --- /dev/null +++ b/Week_09/homework2.java @@ -0,0 +1,23 @@ +//300. 最长递增子序列 + +public class Solution { + public int lengthOfLIS(int[] nums) { + if(nums==null || nums.length==0) { + return 0; + } + int[] dp = new int[nums.length]; + for(int i=0;inums[j]) { + dp[i] = Math.max(dp[i],dp[j]+1); + } + } + } + + return Arrays.stream(dp).max().getAsInt(); + } +} From 0bf38cf0b3f31a3b90b7e0e6f9e8371bfc1fa30e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=99=94?= <33426301+wuliaode@users.noreply.github.com> Date: Mon, 8 Mar 2021 01:41:17 +0800 Subject: [PATCH 22/23] Create homework1.java --- Week_01/homework1.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Week_01/homework1.java diff --git a/Week_01/homework1.java b/Week_01/homework1.java new file mode 100644 index 0000000..30e54e2 --- /dev/null +++ b/Week_01/homework1.java @@ -0,0 +1,15 @@ +//88. 合并两个有序数组 + +class Solution { + public void merge(int[] nums1, int m, int[] nums2, int n) { + int i = m - 1, j = n - 1; + int idx = m + n - 1; + while(j >= 0){ + if(i >= 0 && nums1[i] >= nums2[j]){ + nums1[idx--] = nums1[i--]; + }else{ + nums1[idx--] = nums2[j--]; + } + } + } +} From 688d788c27b762bc99420083b74959851d64c8a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=99=94?= <33426301+wuliaode@users.noreply.github.com> Date: Mon, 8 Mar 2021 01:41:50 +0800 Subject: [PATCH 23/23] Create homework2.java --- Week_01/homework2.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Week_01/homework2.java diff --git a/Week_01/homework2.java b/Week_01/homework2.java new file mode 100644 index 0000000..0fe2a04 --- /dev/null +++ b/Week_01/homework2.java @@ -0,0 +1,16 @@ +//26. 删除排序数组中的重复项 + +class Solution { + public int removeDuplicates(int[] nums) { + if(nums.length == 0) + return 0; + int j = 0; + for(int i = 1;i