LeetCode 2023 年度回顾
# 小插曲
很久没写博客了,差不多两个月了吧😂,最近又懈怠了呢。
首先从github拉取,结果本地启动 ? 报错 !不对啊?之前不是还能跑吗,删除之后从新拉取下来
就不能跑了,XX 果然玄学。
看了报错说是两个依赖问题
- vue-server-renderer@2.7.16
- vue@2.7.14
这两个版本挺接近的啊应该不至于报错。于是看了看源码
vue-server-renderer
我本地依赖的Vue版本
问题很明显,人家要 ===
,于是修改了Vue版本,没报错了。OK!
# 前言
说来惭愧 LeetCode
账号注册了一年多了才想起来,惭愧🤣🤣🤣。
不过最近还是想起来了,奈何入门都不容易。
首先感谢灵神
,精讲了这么多题解
# 年度回顾
首先贴一下LeetCode给我的年末总结吧!
总结起来就是简单题刷多了
其实是简单题为了练习手感,由于答题基本上是在平台上写的,没有什么提示,写起来不免有点不爽。发现大部分题目都不会,或者说简单题都没有好的优化,为了熟悉答题方式写的简单题。现在差不多不刷了。
一次AC的开心😁
优化的开心🤣
为了解决一个问题多次报错
终于解决->优化
隔一段时间重新做又忘记了->解决
经典前缀和和后缀和问题接雨水 (opens new window)
public int trap(int[] height) {
if( height == null || height.length <= 2) return 0;
int ans = 0;
int n = height.length;
int[] l_helps = new int[n];
int max = height[0];
for(int i = 1;i<n;i++){
max = Math.max(max,height[i]);
l_helps[i] = max;
}
max = height[n-1];
for(int i = n-1;i>=1;i--){
max = Math.max(max,height[i]);
ans += Math.min(max, l_helps[i]) - height[i];
}
return ans;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
LCS问题之LCS (opens new window)
public int longestConsecutive(int[] nums) {
if ( nums == null || nums.length == 0) return 0;
Arrays.sort(nums);
int max = 1,t = 1;
for(int i = 1;i<nums.length;i++){
if ( nums[i-1] == nums[i]) continue;
if( nums[i-1] + 1 == nums[i]){
t++;
}else{
max = Math.max(t,max);
t = 1;
}
}
return Math.max(t,max);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
拓扑图的认识课程表 (opens new window)
public boolean canFinish(int numCourses, int[][] prerequisites) {
int[] in = new int[numCourses];
List<List<Integer>> l = new ArrayList<>();
for(int i = 0;i<numCourses;i++){
l.add(new ArrayList<>());
}
for(int[] edge: prerequisites){
in[edge[0]]++;
l.get(edge[1]).add(edge[0]);
}
Deque<Integer> q = new ArrayDeque<>();
for(int i = 0;i<numCourses;i++){
if(in[i] == 0){
q.add(i);
}
}
while(!q.isEmpty()){
int pre = q.poll();
numCourses--;
for(int cur : l.get(pre)){
in[cur]--;
if( in[cur] == 0){
q.add(cur);
}
}
}
return numCourses == 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
经典图的广度优先搜索腐烂的橘子 (opens new window)
public int orangesRotting(int[][] grid) {
if( grid == null || grid.length == 0 ) return -1;
int m = grid.length,n = grid[0].length;
int has = 0;
Deque<int[]> q = new ArrayDeque<>();
for(int i = 0;i<m;i++){
for(int j = 0;j<n;j++){
if( grid[i][j] == 1 ) has++;
// 检查是否有腐烂的
if( grid[i][j] == 2){
q.add(new int[]{i,j});
}
}
}
if( has == 0 ) return 0;
// System.out.println("has = " + has + ",isEmpty = " + q.isEmpty());
if( has != 0 && q.isEmpty() ) return -1;
int ans = 0;
int[] dirs = new int[]{-1,0,1,0,-1};
while( !q.isEmpty() ){
int size = q.size();
while( size != 0 ){
size--;
int[] d = q.poll();
for(int k = 0;k<=3;k++){
int x = d[0] + dirs[k];
int y = d[1] + dirs[k+1];
if( x>=0 && x<m && y>=0 && y< n ){
// System.out.println("x = " + x + ",y = " + y);
if( grid[x][y] == 1){
grid[x][y] = 2;
has--;
q.add(new int[]{x,y});
}
}
}
}
if( !q.isEmpty()) ans++;
}
return has > 0 ? -1 : ans;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
滑动窗口之最小覆盖子串 (opens new window)
public String minWindow(String s, String t) {
if( isEmpty(s) || isEmpty(t) || s.length() < t.length() ) {
return "";
}
if( s.equals(t)) return s;
int n = s.length();
char[] ss = s.toCharArray();
char[] ts = t.toCharArray();
int[] have = new int[128];
int[] need = new int[128];
for(char c : ts ){
need[c]++;
}
int r = 0, l = 0, min = n+1,cnt = 0,start = 0;
while( r < n ){
//
char c = ss[r];
if(need[c] == 0) {
r++;
continue;
}
if( have[c] < need[c]){
cnt++; // 检查字符种类是否达到要求
}
have[c]++;
r++;
while( cnt == ts.length ){
c = ss[l];
if( r - l < min ){
// System.out.println("star=======" + l);
start = l;
min = r - l;
}
if( need[c] == 0 ) {
l++;
continue;
}
// 检查是否需要删除
if( have[c] == need[c]){
cnt--;
}
have[c]--;
l++;
}
}
// System.out.println("min" + min + ",start = " + start);
// return "";
return min == n + 1 ? "" : s.substring(start,start+min);
}
public static boolean isEmpty(String a){
return a == null || a.length() == 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
还有很多典型题目就不贴了……
# 2024 期望
- 周赛1700
- 刷题到800
编辑 (opens new window)
上次更新: 2024-05-21, 09:50:09