From c1efa19bc75a60d33cf5e67fe34610251c9d186f Mon Sep 17 00:00:00 2001 From: qq_44193969 <2608882093@qq.com> Date: Fri, 31 Dec 2021 10:09:35 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A020=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +- .../1.cpp/26.exercises/solution.md" | 101 +++++++++++- .../1.cpp/27.exercises/solution.md" | 58 ++++++- .../1.cpp/28.exercises/solution.md" | 155 +++++++++++++++++- .../1.cpp/29.exercises/solution.md" | 73 ++++++++- .../1.cpp/30.exercises/solution.md" | 68 +++++++- .../1.cpp/31.exercises/solution.md" | 99 ++++++++++- .../1.cpp/32.exercises/solution.md" | 86 +++++++++- .../1.cpp/33.exercises/solution.md" | 84 +++++++++- .../1.cpp/34.exercises/solution.md" | 59 ++++++- .../1.cpp/35.exercises/solution.md" | 48 +++++- .../1.cpp/36.exercises/solution.md" | 59 ++++++- .../1.cpp/37.exercises/solution.md" | 77 ++++++++- .../1.cpp/38.exercises/solution.md" | 81 ++++++++- .../1.cpp/39.exercises/solution.md" | 80 ++++++++- .../1.cpp/40.exercises/solution.md" | 27 ++- .../2.java/1.exercises/solution.md" | 73 ++++++++- .../2.java/10.exercises/solution.md" | 61 ++++++- .../2.java/11.exercises/solution.md" | 58 ++++++- .../2.java/12.exercises/solution.md" | 74 ++++++++- .../2.java/13.exercises/solution.md" | 145 +++++++++++++++- .../2.java/14.exercises/solution.md" | 61 ++++++- .../2.java/15.exercises/solution.md" | 56 ++++++- .../2.java/16.exercises/solution.md" | 65 +++++++- .../2.java/17.exercises/solution.md" | 77 ++++++++- .../2.java/18.exercises/solution.md" | 46 +++++- .../2.java/19.exercises/solution.md" | 41 ++++- .../2.java/2.exercises/solution.md" | 47 +++++- .../2.java/20.exercises/solution.md" | 37 ++++- .../2.java/3.exercises/solution.md" | 44 ++++- .../2.java/4.exercises/solution.md" | 49 +++++- .../2.java/5.exercises/solution.md" | 60 ++++++- .../2.java/6.exercises/solution.md" | 61 ++++++- .../2.java/7.exercises/solution.md" | 70 +++++++- .../2.java/8.exercises/solution.md" | 67 +++++++- .../2.java/9.exercises/solution.md" | 53 +++++- 36 files changed, 2262 insertions(+), 141 deletions(-) diff --git a/.gitignore b/.gitignore index bee05a179..e534948d5 100644 --- a/.gitignore +++ b/.gitignore @@ -9,4 +9,5 @@ helper.py test.md data_source/dailycode test.cpp -test.py \ No newline at end of file +test.py +test.java \ No newline at end of file diff --git "a/data/3.dailycode\351\253\230\351\230\266/1.cpp/26.exercises/solution.md" "b/data/3.dailycode\351\253\230\351\230\266/1.cpp/26.exercises/solution.md" index e5570506a..c59fc9115 100644 --- "a/data/3.dailycode\351\253\230\351\230\266/1.cpp/26.exercises/solution.md" +++ "b/data/3.dailycode\351\253\230\351\230\266/1.cpp/26.exercises/solution.md" @@ -2,6 +2,79 @@
给定一个仅包含 0
和 1
、大小为 rows x cols
的二维二进制矩阵,找出只包含 1
的最大矩形,并返回其面积。
示例 1:
输入:matrix = [["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]]
输出:6
解释:最大矩形如上图所示。
示例 2:
输入:matrix = []
输出:0
示例 3:
输入:matrix = [["0"]]
输出:0
示例 4:
输入:matrix = [["1"]]
输出:1
示例 5:
输入:matrix = [["0","0"]]
输出:0
提示:
rows == matrix.length
cols == matrix[0].length
0 <= row, cols <= 200
matrix[i][j]
为 '0'
或 '1'
给你两个单词 word1
和 word2
,请你计算出将 word1
转换成 word2
所使用的最少操作数 。
你可以对一个单词进行如下三种操作:
示例 1:
输入:word1 = "horse", word2 = "ros"
输出:3
解释:horse -> rorse (将 'h' 替换为 'r')rorse -> rose (删除 'r')rose -> ros (删除 'e')
示例 2:
输入:word1 = "intention", word2 = "execution"
输出:5
解释:intention -> inention (删除 't')inention -> enention (将 'i' 替换为 'e')enention -> exention (将 'n' 替换为 'x')exention -> exection (将 'n' 替换为 'c')exection -> execution (插入 'u')
提示:
0 <= word1.length, word2.length <= 500
word1
和 word2
由小写英文字母组成给你一个只包含 '('
和 ')'
的字符串,找出最长有效(格式正确且连续)括号子串的长度。
示例 1:
输入:s = "(()"
输出:2
解释:最长有效括号子串是 "()"
示例 2:
输入:s = ")()())"
输出:4
解释:最长有效括号子串是 "()()"
示例 3:
输入:s = ""
输出:0
提示:
0 <= s.length <= 3 * 104
s[i]
为 '('
或 ')'
n 皇后问题 研究的是如何将 n
个皇后放置在 n×n
的棋盘上,并且使皇后彼此之间不能相互攻击。
给你一个整数 n
,返回所有不同的 n 皇后问题 的解决方案。
每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 'Q'
和 '.'
分别代表了皇后和空位。
示例 1:
输入:n = 4
输出:[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]
解释:如上图所示,4 皇后问题存在两个不同的解法。
示例 2:
输入:n = 1
输出:[["Q"]]
提示:
1 <= n <= 9
给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。
k 是一个正整数,它的值小于或等于链表的长度。
如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。
进阶:
示例 1:
输入:head = [1,2,3,4,5], k = 2
输出:[2,1,4,3,5]
示例 2:
输入:head = [1,2,3,4,5], k = 3
输出:[3,2,1,4,5]
示例 3:
输入:head = [1,2,3,4,5], k = 1
输出:[1,2,3,4,5]
示例 4:
输入:head = [1], k = 1
输出:[1]
提示:
sz
内1 <= sz <= 5000
0 <= Node.val <= 1000
1 <= k <= sz
有效数字(按顺序)可以分成以下几个部分:
'e'
或 'E'
,后面跟着一个 整数小数(按顺序)可以分成以下几个部分:
'+'
或 '-'
)'.'
'.'
,后面再跟着至少一位数字'.'
,后面跟着至少一位数字整数(按顺序)可以分成以下几个部分:
'+'
或 '-'
)部分有效数字列举如下:
["2", "0089", "-0.1", "+3.14", "4.", "-.9", "2e10", "-90E3", "3e+7", "+6e-1", "53.5e93", "-123.456e789"]
部分无效数字列举如下:
["abc", "1a", "1e", "e3", "99e2.5", "--6", "-+3", "95a54e53"]
给你一个字符串 s
,如果 s
是一个 有效数字 ,请返回 true
。
示例 1:
输入:s = "0"
输出:true
示例 2:
输入:s = "e"
输出:false
示例 3:
输入:s = "."
输出:false
示例 4:
输入:s = ".1"
输出:true
提示:
1 <= s.length <= 20
s
仅含英文字母(大写和小写),数字(0-9
),加号 '+'
,减号 '-'
,或者点 '.'
。示例 2:
输入: s = "wordgoodgoodgoodbestword", words = ["word","good","best","word"]+以下程序实现了这一功能,请你填补空白处的内容: + +```cpp +#include
输出:[]
给定两个大小分别为 m
和 n
的正序(从小到大)数组 nums1
和 nums2
。请你找出并返回这两个正序数组的 中位数 。
示例 1:
输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2
示例 2:
输入:nums1 = [1,2], nums2 = [3,4]
输出:2.50000
解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5
示例 3:
输入:nums1 = [0,0], nums2 = [0,0]
输出:0.00000
示例 4:
输入:nums1 = [], nums2 = [1]
输出:1.00000
示例 5:
输入:nums1 = [2], nums2 = []
输出:2.00000
提示:
nums1.length == m
nums2.length == n
0 <= m <= 1000
0 <= n <= 1000
1 <= m + n <= 2000
-106 <= nums1[i], nums2[i] <= 106
进阶:你能设计一个时间复杂度为 O(log (m+n))
的算法解决此问题吗?
给你一个字符串 s
、一个字符串 t
。返回 s
中涵盖 t
所有字符的最小子串。如果 s
中不存在涵盖 t
所有字符的子串,则返回空字符串 ""
。
注意:如果 s
中存在这样的子串,我们保证它是唯一的答案。
示例 1:
输入:s = "ADOBECODEBANC", t = "ABC"
输出:"BANC"
示例 2:
输入:s = "a", t = "a"
输出:"a"
提示:
1 <= s.length, t.length <= 105
s
和 t
由英文字母组成进阶:你能设计一个在
o(n)
时间内解决此问题的算法吗?
+以下程序实现了这一功能,请你填补空白处的内容:
+
+```cpp
+#include 给你一个链表数组,每个链表都已经按升序排列。
请你将所有链表合并到一个升序链表中,返回合并后的链表。
示例 1:
输入:lists = [[1,4,5],[1,3,4],[2,6]]
输出:[1,1,2,3,4,4,5,6]
解释:链表数组如下:[ 1->4->5, 1->3->4, 2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6
示例 2:
输入:lists = []
输出:[]
示例 3:
输入:lists = [[]]
输出:[]
提示:
k == lists.length
0 <= k <= 10^4
0 <= lists[i].length <= 500
-10^4 <= lists[i][j] <= 10^4
lists[i]
按 升序 排列lists[i].length
的总和不超过 10^4
给出集合 [1,2,3,...,n]
,其所有元素共有 n!
种排列。
按大小顺序列出所有排列情况,并一一标记,当 n = 3
时, 所有排列如下:
"123"
"132"
"213"
"231"
"312"
"321"
给定 n
和 k
,返回第 k
个排列。
示例 1:
输入:n = 3, k = 3
输出:"213"
示例 2:
输入:n = 4, k = 9
输出:"2314"
示例 3:
输入:n = 3, k = 1
输出:"123"
提示:
1 <= n <= 9
1 <= k <= n!
给定一个字符串 (s
) 和一个字符模式 (p
) ,实现一个支持 '?'
和 '*'
的通配符匹配。
'?' 可以匹配任何单个字符。'*' 可以匹配任意字符串(包括空字符串)。
两个字符串完全匹配才算匹配成功。
说明:
s
可能为空,且只包含从 a-z
的小写字母。p
可能为空,且只包含从 a-z
的小写字母,以及字符 ?
和 *
。示例 1:
输入:s = "aa"p = "a"
输出: false
解释: "a" 无法匹配 "aa" 整个字符串。
示例 2:
输入:s = "aa"p = "*"
输出: true
解释: '*' 可以匹配任意字符串。
示例 3:
输入:s = "cb"p = "?a"
输出: false
解释: '?' 可以匹配 'c', 但第二个 'a' 无法匹配 'b'。
示例 4:
输入:s = "adceb"p = "*a*b"
输出: true
解释: 第一个 '*' 可以匹配空字符串, 第二个 '*' 可以匹配字符串 "dce".
示例 5:
输入:s = "acdcb"p = "a*c?b"+以下程序实现了这一功能,请你填补空白处的内容: + +```cpp +#include
输出: false
给你一个字符串 s
和一个字符规律 p
,请你来实现一个支持 '.'
和 '*'
的正则表达式匹配。
'.'
匹配任意单个字符'*'
匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s
的,而不是部分字符串。
示例 1:
输入:s = "aa" p = "a"
输出:false
解释:"a" 无法匹配 "aa" 整个字符串。
示例 2:
输入:s = "aa" p = "a*"
输出:true
解释:因为 '*' 代表可以匹配零个或多个前面的那一个元素, 在这里前面的元素就是 'a'。因此,字符串 "aa" 可被视为 'a' 重复了一次。
示例 3:
输入:s = "ab" p = ".*"
输出:true
解释:".*" 表示可匹配零个或多个('*')任意字符('.')。
示例 4:
输入:s = "aab" p = "c*a*b"
输出:true
解释:因为 '*' 表示零个或多个,这里 'c' 为 0 个, 'a' 被重复一次。因此可以匹配字符串 "aab"。
示例 5:
输入:s = "mississippi" p = "mis*is*p*."
输出:false
提示:
0 <= s.length <= 20
0 <= p.length <= 30
s
可能为空,且只包含从 a-z
的小写字母。p
可能为空,且只包含从 a-z
的小写字母,以及字符 .
和 *
。*
时,前面都匹配到有效的字符n 皇后问题 研究的是如何将 n
个皇后放置在 n×n
的棋盘上,并且使皇后彼此之间不能相互攻击。
给你一个整数 n
,返回所有不同的 n 皇后问题 的解决方案。
每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 'Q'
和 '.'
分别代表了皇后和空位。
示例 1:
输入:n = 4
输出:[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]
解释:如上图所示,4 皇后问题存在两个不同的解法。
示例 2:
输入:n = 1
输出:[["Q"]]
提示:
1 <= n <= 9
给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。
k 是一个正整数,它的值小于或等于链表的长度。
如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。
进阶:
示例 1:
输入:head = [1,2,3,4,5], k = 2
输出:[2,1,4,3,5]
示例 2:
输入:head = [1,2,3,4,5], k = 3
输出:[3,2,1,4,5]
示例 3:
输入:head = [1,2,3,4,5], k = 1
输出:[1,2,3,4,5]
示例 4:
输入:head = [1], k = 1
输出:[1]
提示:
sz
内1 <= sz <= 5000
0 <= Node.val <= 1000
1 <= k <= sz
有效数字(按顺序)可以分成以下几个部分:
'e'
或 'E'
,后面跟着一个 整数小数(按顺序)可以分成以下几个部分:
'+'
或 '-'
)'.'
'.'
,后面再跟着至少一位数字'.'
,后面跟着至少一位数字整数(按顺序)可以分成以下几个部分:
'+'
或 '-'
)部分有效数字列举如下:
["2", "0089", "-0.1", "+3.14", "4.", "-.9", "2e10", "-90E3", "3e+7", "+6e-1", "53.5e93", "-123.456e789"]
部分无效数字列举如下:
["abc", "1a", "1e", "e3", "99e2.5", "--6", "-+3", "95a54e53"]
给你一个字符串 s
,如果 s
是一个 有效数字 ,请返回 true
。
示例 1:
输入:s = "0"
输出:true
示例 2:
输入:s = "e"
输出:false
示例 3:
输入:s = "."
输出:false
示例 4:
输入:s = ".1"
输出:true
提示:
1 <= s.length <= 20
s
仅含英文字母(大写和小写),数字(0-9
),加号 '+'
,减号 '-'
,或者点 '.'
。示例 2:
输入: s = "wordgoodgoodgoodbestword", words = ["word","good","best","word"]+以下程序实现了这一功能,请你填补空白处内容: + +```java +class Solution { + public List
输出:[]
给定两个大小分别为 m
和 n
的正序(从小到大)数组 nums1
和 nums2
。请你找出并返回这两个正序数组的 中位数 。
示例 1:
输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2
示例 2:
输入:nums1 = [1,2], nums2 = [3,4]
输出:2.50000
解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5
示例 3:
输入:nums1 = [0,0], nums2 = [0,0]
输出:0.00000
示例 4:
输入:nums1 = [], nums2 = [1]
输出:1.00000
示例 5:
输入:nums1 = [2], nums2 = []
输出:2.00000
提示:
nums1.length == m
nums2.length == n
0 <= m <= 1000
0 <= n <= 1000
1 <= m + n <= 2000
-106 <= nums1[i], nums2[i] <= 106
进阶:你能设计一个时间复杂度为 O(log (m+n))
的算法解决此问题吗?
给你一个字符串 s
、一个字符串 t
。返回 s
中涵盖 t
所有字符的最小子串。如果 s
中不存在涵盖 t
所有字符的子串,则返回空字符串 ""
。
注意:如果 s
中存在这样的子串,我们保证它是唯一的答案。
示例 1:
输入:s = "ADOBECODEBANC", t = "ABC"
输出:"BANC"
示例 2:
输入:s = "a", t = "a"
输出:"a"
提示:
1 <= s.length, t.length <= 105
s
和 t
由英文字母组成进阶:你能设计一个在
o(n)
时间内解决此问题的算法吗?
+以下程序实现了这一功能,请你填补空白处内容:
+
+```java
+public class Min_Win_Sub {
+ public String minWindow(String s, String t) {
+ int[] ta = new int[128];
+ int[] sa = new int[128];
+ int min = Integer.MAX_VALUE;
+ String minwin = "";
+ for (int i = 0; i < t.length(); i++) {
+ ta[t.charAt(i)]++;
+ }
+ int count = 0;
+ int end = 0;
+ int start = 0;
+ while (end < s.length()) {
+ if (ta[s.charAt(end)] != 0) {
+ if (sa[s.charAt(end)] < ta[s.charAt(end)]) {
+ count++;
+ }
+ sa[s.charAt(end)]++;
+ }
+ if (count == t.length()) {
+ _________________;
+ if (end - start + 1 < min) {
+ minwin = s.substring(start, end + 1);
+ min = end - start + 1;
+ }
+ }
+ end++;
+ }
+ return minwin;
+ }
+
+}
+```
+
## template
```java
@@ -47,7 +84,12 @@ public class Min_Win_Sub {
## 答案
```java
-
+while (ta[s.charAt(start)] == 0 || sa[s.charAt(start)] > ta[s.charAt(start)]) {
+ if (sa[s.charAt(start)] > ta[s.charAt(start)]) {
+ sa[s.charAt(start)]--;
+ }
+ start++;
+}
```
## 选项
@@ -55,17 +97,32 @@ public class Min_Win_Sub {
### A
```java
-
+while (ta[s.charAt(start)] == 0 || sa[s.charAt(start)] > ta[s.charAt(start)]) {
+ if (sa[s.charAt(start)] < ta[s.charAt(start)]) {
+ sa[s.charAt(start)]--;
+ }
+ start++;
+}
```
### B
```java
-
+while (ta[s.charAt(start)] == 0 || sa[s.charAt(start)] > ta[s.charAt(start)]) {
+ if (sa[s.charAt(start)] <= ta[s.charAt(start)]) {
+ sa[s.charAt(start)]--;
+ }
+ start++;
+}
```
### C
```java
-
+while (ta[s.charAt(start)] == 0 || sa[s.charAt(start)] >= ta[s.charAt(start)]) {
+ if (sa[s.charAt(start)] <= ta[s.charAt(start)]) {
+ sa[s.charAt(start)]--;
+ }
+ start++;
+}
```
\ No newline at end of file
diff --git "a/data/3.dailycode\351\253\230\351\230\266/2.java/17.exercises/solution.md" "b/data/3.dailycode\351\253\230\351\230\266/2.java/17.exercises/solution.md"
index 2204bc595..1256e2b69 100644
--- "a/data/3.dailycode\351\253\230\351\230\266/2.java/17.exercises/solution.md"
+++ "b/data/3.dailycode\351\253\230\351\230\266/2.java/17.exercises/solution.md"
@@ -2,6 +2,71 @@
给你一个链表数组,每个链表都已经按升序排列。
请你将所有链表合并到一个升序链表中,返回合并后的链表。
示例 1:
输入:lists = [[1,4,5],[1,3,4],[2,6]]
输出:[1,1,2,3,4,4,5,6]
解释:链表数组如下:[ 1->4->5, 1->3->4, 2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6
示例 2:
输入:lists = []
输出:[]
示例 3:
输入:lists = [[]]
输出:[]
提示:
k == lists.length
0 <= k <= 10^4
0 <= lists[i].length <= 500
-10^4 <= lists[i][j] <= 10^4
lists[i]
按 升序 排列lists[i].length
的总和不超过 10^4
给出集合 [1,2,3,...,n]
,其所有元素共有 n!
种排列。
按大小顺序列出所有排列情况,并一一标记,当 n = 3
时, 所有排列如下:
"123"
"132"
"213"
"231"
"312"
"321"
给定 n
和 k
,返回第 k
个排列。
示例 1:
输入:n = 3, k = 3
输出:"213"
示例 2:
输入:n = 4, k = 9
输出:"2314"
示例 3:
输入:n = 3, k = 1
输出:"123"
提示:
1 <= n <= 9
1 <= k <= n!
给定一个字符串 (s
) 和一个字符模式 (p
) ,实现一个支持 '?'
和 '*'
的通配符匹配。
'?' 可以匹配任何单个字符。'*' 可以匹配任意字符串(包括空字符串)。
两个字符串完全匹配才算匹配成功。
说明:
s
可能为空,且只包含从 a-z
的小写字母。p
可能为空,且只包含从 a-z
的小写字母,以及字符 ?
和 *
。示例 1:
输入:s = "aa"p = "a"
输出: false
解释: "a" 无法匹配 "aa" 整个字符串。
示例 2:
输入:s = "aa"p = "*"
输出: true
解释: '*' 可以匹配任意字符串。
示例 3:
输入:s = "cb"p = "?a"
输出: false
解释: '?' 可以匹配 'c', 但第二个 'a' 无法匹配 'b'。
示例 4:
输入:s = "adceb"p = "*a*b"
输出: true
解释: 第一个 '*' 可以匹配空字符串, 第二个 '*' 可以匹配字符串 "dce".
示例 5:
输入:s = "acdcb"p = "a*c?b"+以下程序实现了这一功能,请你填补空白处内容: + +```java +class Solution { + public boolean isMatch(String s, String p) { + boolean[][] value = new boolean[p.length() + 1][s.length() + 1]; + value[0][0] = true; + for (int i = 1; i <= s.length(); i++) { + value[0][i] = false; + } + for (int i = 1; i <= p.length(); i++) { + if (p.charAt(i - 1) == '*') { + value[i][0] = value[i - 1][0]; + for (int j = 1; j <= s.length(); j++) { + value[i][j] = (value[i][j - 1] || value[i - 1][j]); + } + } else if (p.charAt(i - 1) == '?') { + value[i][0] = false; + for (int j = 1; j <= s.length(); j++) { + value[i][j] = value[i - 1][j - 1]; + } + } else { + value[i][0] = false; + for (int j = 1; j <= s.length(); j++) { + ____________________; + } + } + } + return value[p.length()][s.length()]; + } +} +``` + ## template ```java @@ -38,7 +71,7 @@ class Solution { ## 答案 ```java - +value[i][j] = s.charAt(j - 1) == p.charAt(i - 1) && value[i - 1][j - 1]; ``` ## 选项 @@ -46,17 +79,17 @@ class Solution { ### A ```java - +value[i][j] = s.charAt(j - 1) == p.charAt(i - 1) || value[i - 1][j - 1]; ``` ### B ```java - +value[i][j] = s.charAt(j - 1) == p.charAt(i) && value[i - 1][j]; ``` ### C ```java - +value[i][j] = s.charAt(j - 1) == p.charAt(i - 1) && value[i][j - 1]; ``` \ No newline at end of file diff --git "a/data/3.dailycode\351\253\230\351\230\266/2.java/2.exercises/solution.md" "b/data/3.dailycode\351\253\230\351\230\266/2.java/2.exercises/solution.md" index a2c7645ea..4b3ada41e 100644 --- "a/data/3.dailycode\351\253\230\351\230\266/2.java/2.exercises/solution.md" +++ "b/data/3.dailycode\351\253\230\351\230\266/2.java/2.exercises/solution.md" @@ -2,6 +2,37 @@
输出: false
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
示例 1:
输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]
输出:6
解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。
示例 2:
输入:height = [4,2,0,3,2,5]
输出:9
提示:
n == height.length
0 <= n <= 3 * 104
0 <= height[i] <= 105
给你一个字符串 s
和一个字符规律 p
,请你来实现一个支持 '.'
和 '*'
的正则表达式匹配。
'.'
匹配任意单个字符'*'
匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s
的,而不是部分字符串。
示例 1:
输入:s = "aa" p = "a"
输出:false
解释:"a" 无法匹配 "aa" 整个字符串。
示例 2:
输入:s = "aa" p = "a*"
输出:true
解释:因为 '*' 代表可以匹配零个或多个前面的那一个元素, 在这里前面的元素就是 'a'。因此,字符串 "aa" 可被视为 'a' 重复了一次。
示例 3:
输入:s = "ab" p = ".*"
输出:true
解释:".*" 表示可匹配零个或多个('*')任意字符('.')。
示例 4:
输入:s = "aab" p = "c*a*b"
输出:true
解释:因为 '*' 表示零个或多个,这里 'c' 为 0 个, 'a' 被重复一次。因此可以匹配字符串 "aab"。
示例 5:
输入:s = "mississippi" p = "mis*is*p*."
输出:false
提示:
0 <= s.length <= 20
0 <= p.length <= 30
s
可能为空,且只包含从 a-z
的小写字母。p
可能为空,且只包含从 a-z
的小写字母,以及字符 .
和 *
。*
时,前面都匹配到有效的字符给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。
求在该柱状图中,能够勾勒出来的矩形的最大面积。
以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]
。
图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10
个单位。
示例:
输入: [2,1,5,6,2,3]+以下程序实现了这一功能,请你填补空白处内容: + +```java +class Solution { + public int largestRectangleArea(int[] heights) { + int length = heights.length; + if (length == 0) { + return 0; + } + int maxSize = 0; + for (int i = 0; i < length; i++) { + int nowHeight = heights[i]; + int nowWidth = 0; + for (int j = i; j < length; j++) { + ___________________; + nowWidth++; + if (maxSize < nowHeight * nowWidth) { + maxSize = nowHeight * nowWidth; + } + } + + } + return maxSize; + } +} + +``` + ## template ```java @@ -35,7 +63,9 @@ class Solution { ## 答案 ```java - +if (heights[j] < nowHeight) { + nowHeight = heights[j]; +} ``` ## 选项 @@ -43,17 +73,23 @@ class Solution { ### A ```java - +if (heights[j] > nowHeight) { + nowHeight = heights[j]; +} ``` ### B ```java - +if (heights[j] >= nowHeight) { + nowHeight = heights[j] + 1; +} ``` ### C ```java - +if (heights[j] < nowHeight) { + nowHeight = heights[j] + 1; +} ``` \ No newline at end of file diff --git "a/data/3.dailycode\351\253\230\351\230\266/2.java/4.exercises/solution.md" "b/data/3.dailycode\351\253\230\351\230\266/2.java/4.exercises/solution.md" index 6eef76dd7..a491f21b0 100644 --- "a/data/3.dailycode\351\253\230\351\230\266/2.java/4.exercises/solution.md" +++ "b/data/3.dailycode\351\253\230\351\230\266/2.java/4.exercises/solution.md" @@ -2,6 +2,39 @@
输出: 10
给你一个未排序的整数数组 nums
,请你找出其中没有出现的最小的正整数。
进阶:你可以实现时间复杂度为 O(n)
并且只使用常数级别额外空间的解决方案吗?
示例 1:
输入:nums = [1,2,0]
输出:3
示例 2:
输入:nums = [3,4,-1,1]
输出:2
示例 3:
输入:nums = [7,8,9,11,12]
输出:1
提示:
0 <= nums.length <= 300
-231 <= nums[i] <= 231 - 1
给定一个仅包含 0
和 1
、大小为 rows x cols
的二维二进制矩阵,找出只包含 1
的最大矩形,并返回其面积。
示例 1:
输入:matrix = [["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]]
输出:6
解释:最大矩形如上图所示。
示例 2:
输入:matrix = []
输出:0
示例 3:
输入:matrix = [["0"]]
输出:0
示例 4:
输入:matrix = [["1"]]
输出:1
示例 5:
输入:matrix = [["0","0"]]
输出:0
提示:
rows == matrix.length
cols == matrix[0].length
0 <= row, cols <= 200
matrix[i][j]
为 '0'
或 '1'
给你两个单词 word1
和 word2
,请你计算出将 word1
转换成 word2
所使用的最少操作数 。
你可以对一个单词进行如下三种操作:
示例 1:
输入:word1 = "horse", word2 = "ros"
输出:3
解释:horse -> rorse (将 'h' 替换为 'r')rorse -> rose (删除 'r')rose -> ros (删除 'e')
示例 2:
输入:word1 = "intention", word2 = "execution"
输出:5
解释:intention -> inention (删除 't')inention -> enention (将 'i' 替换为 'e')enention -> exention (将 'n' 替换为 'x')exention -> exection (将 'n' 替换为 'c')exection -> execution (插入 'u')
提示:
0 <= word1.length, word2.length <= 500
word1
和 word2
由小写英文字母组成给你一个只包含 '('
和 ')'
的字符串,找出最长有效(格式正确且连续)括号子串的长度。
示例 1:
输入:s = "(()"
输出:2
解释:最长有效括号子串是 "()"
示例 2:
输入:s = ")()())"
输出:4
解释:最长有效括号子串是 "()()"
示例 3:
输入:s = ""
输出:0
提示:
0 <= s.length <= 3 * 104
s[i]
为 '('
或 ')'