Skip to content

Commit f8a98e3

Browse files
author
quchao161
committed
update top_freq_algorithm
1 parent 577b73c commit f8a98e3

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+1651
-780
lines changed

algotithm/top_freq_question.md

+1,523-652
Large diffs are not rendered by default.

data_struct_study/.idea/workspace.xml

+47-6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

data_struct_study/src/LinkedList_problem/Solution23.java

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.util.PriorityQueue;
44

5+
56
/**
67
* 题目描述:给你一个链表数组,每个链表都已经按升序排列。
78
* 请你将所有链表合并到一个升序链表中,返回合并后的链表。

data_struct_study/src/LinkedList_problem/Solution445.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package LinkedList_problem;
22

3-
43
import java.util.Stack;
54

5+
66
/**
77
* 题目描述:给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。
88
* 它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。
@@ -11,7 +11,6 @@
1111
* 进阶:如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。
1212
*
1313
* 示例:
14-
*
1514
* 输入:(7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)
1615
* 输出:7 -> 8 -> 0 -> 7
1716
*

data_struct_study/src/LinkedList_problem/Solution_2.java

+1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package LinkedList_problem;
22

3+
34
/**
45
* 单链表的选择排序:
56
*

data_struct_study/src/LinkedList_problem/Solution_3.java

-26
Original file line numberDiff line numberDiff line change
@@ -43,30 +43,4 @@ public ListNode findKthToTail(ListNode head, int k) {
4343
return P2;
4444
}
4545

46-
public ListNode findKthToEnd(ListNode head, int k) {
47-
// 1、异常处理:如果head==null,则直接返回
48-
if (head == null) {
49-
return null;
50-
}
51-
52-
// 2、初始化P1,然后移动P1 k步
53-
ListNode P1 = head;
54-
while (P1 != null && k-- > 0) {
55-
P1 = P1.next;
56-
}
57-
58-
// 3、异常处理:如果k步没有走完,直接返回null
59-
if (k > 0) {
60-
return null;
61-
}
62-
63-
// 4、初始化P2,然后同时移动P1、P2,当P1走到null时,P2就是倒数第k个节点
64-
ListNode P2 = head;
65-
while (P1 != null) {
66-
P1 = P1.next;
67-
P2 = P2.next;
68-
}
69-
70-
return P2;
71-
}
7246
}

data_struct_study/src/LinkedList_problem/Solution_4_4.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package LinkedList_problem;
22

33

4-
import java.security.PublicKey;
5-
6-
// 快慢指针:
7-
// 时间复杂度:O(n), 空间复杂度:O(1)
4+
/**
5+
* 快慢指针:
6+
* 时间复杂度:O(n), 空间复杂度:O(1)
7+
*/
88
public class Solution_4_4 {
99

1010
// 4、快慢指针解法:先使用快慢指针找到前半个链表的尾节点,然后翻转后半个部分链表,

data_struct_study/src/array_problem/BinarySearch2.java

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
* 100 万的数据量只需零点几秒。
66
* 注意搜索开闭区间的设定,例如 [0, n - 1] 或 [0, n)。
77
* 1962 才意识到的 bug:mid = (l + r) / 2 可能会产生整形溢出,推荐使用减法:l + (r-l)/2。
8+
*
89
* 如何写出正确的程序?
910
* 1、明确变量的含义。
1011
* 2、循环不变量。

data_struct_study/src/array_problem/Solution11.java

+3-12
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,21 @@
11
package array_problem;
2-
//https://leetcode-cn.com/problems/container-with-most-water/:盛最多水的容器
2+
33

44
/**
55
* 给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。
66
* 在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。
77
* 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
88
*
99
* 说明:你不能倾斜容器,且 n 的值至少为 2。
10-
*
11-
*  
12-
*
13-
*
14-
*
15-
* 图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。
16-
*
17-
*  
10+
* 图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,
11+
* 容器能够容纳水(表示为蓝色部分)的最大值为 49。
1812
*
1913
* 示例:
20-
*
2114
* 输入:[1,8,6,2,5,4,8,3,7]
2215
* 输出:49
23-
*
2416
*/
2517
public class Solution11 {
2618

27-
2819
public int maxArea(int[] height) {
2920

3021
// 1、初始化记录窗口左右边界的位置 & 最大面积

data_struct_study/src/array_problem/Solution167.java

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
package array_problem;
2-
//https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted/:两数之和 II - 输入有序数组
32

43
import java.util.Arrays;
54

5+
66
/**
77
* 给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。
8-
*
98
* 函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。
109
*
1110
* 说明:
12-
*
1311
* 返回的下标值(index1 和 index2)不是从零开始的。
1412
* 你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。
1513
* 示例:

data_struct_study/src/array_problem/Solution215.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package array_problem;
22

33
/**
4-
* 在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
4+
* 在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后
5+
* 的第 k 个最大的元素,而不是第 k 个不同的元素。
56
*
67
* 示例 1:
7-
*
88
* 输入: [3,2,1,5,6,4] 和 k = 2
99
* 输出: 5
1010
* 示例 2:

data_struct_study/src/array_problem/Solution344.java

+2-7
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,18 @@
11
package array_problem;
2-
//https://leetcode-cn.com/problems/reverse-string/:反转字符串
2+
33

44
/**
55
* 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。
6-
*
76
* 不要创建另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
8-
*
97
* 你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。
108
*
119
* 示例 1:
12-
*
1310
* 输入:["h","e","l","l","o"]
1411
* 输出:["o","l","l","e","h"]
15-
* 示例 2:
1612
*
13+
* 示例 2:
1714
* 输入:["H","a","n","n","a","h"]
1815
* 输出:["h","a","n","n","a","H"]
19-
*
20-
*
2116
*/
2217
public class Solution344 {
2318

data_struct_study/src/array_problem/Solution3_2.java

-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ public int lengthOfLongestSubstring(String s) {
4141
}
4242

4343
public static void main(String[] args) {
44-
4544
System.out.println((new Solution3_2()).lengthOfLongestSubstring( "abcabcbb" ));
4645
}
4746

data_struct_study/src/array_problem/Solution3_4.java

-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package array_problem;
22

3-
import array.Array;
4-
53
import java.util.Arrays;
64

75
/**

data_struct_study/src/array_problem/Solution56.java

-1
Original file line numberDiff line numberDiff line change
@@ -48,5 +48,4 @@ public int[][] merge(int[][] intervals) {
4848
return list.toArray(new int[0][]);
4949
}
5050

51-
5251
}

data_struct_study/src/array_problem/Solution88.java

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,16 @@
11
package array_problem;
2-
//https://leetcode-cn.com/problems/merge-sorted-array/:合并两个有序数组
2+
33

44
/**
55
* 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。
6-
*
76
* 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。
87
* 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。
98
*  
109
* 示例:
11-
*
1210
* 输入:
1311
* nums1 = [1,2,3,0,0,0], m = 3
1412
* nums2 = [2,5,6], n = 3
15-
*
1613
* 输出: [1,2,2,3,5,6]
17-
*
1814
*/
1915
public class Solution88 {
2016

data_struct_study/src/array_problem/Solution_1.java

-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
*/
77
public class Solution_1 {
88

9-
109
// 1、哈希法:遍历数组,用map记录所有元素出现的次数,然后再遍历数组,找出只出现一次的数。
1110
// 时间复杂度:O(n), 空间复杂度:O(n)
1211
// 2、位运算:两个不相等的元素在位级表示上必定会有一位存在不同,将数组的所有元素异或得到的结果

data_struct_study/src/backstracking_problem/Solution46.java

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.util.ArrayList;
44
import java.util.List;
55

6+
67
/**
78
* 排列问题
89
* 时间复杂度:O(n*n!)

data_struct_study/src/backstracking_problem/Solution47.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package backstracking_problem;
22

3-
43
import java.util.ArrayList;
54
import java.util.Arrays;
65
import java.util.List;
76

7+
88
/**
99
* 排列问题
1010
* 时间复杂度:O(n*n!)

data_struct_study/src/backstracking_problem/Solution93.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@
44
import java.util.LinkedList;
55
import java.util.List;
66

7+
78
/**
89
* 递归与回溯
910
*
1011
* 题目描述:给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。
11-
* 有效的 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。
12+
* 有效的 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),
13+
* 整数之间用 '.' 分隔。
1214
*
1315
* 时间复杂度:O(3 ^ SEG_COUNT * ∣s∣)
1416
* 空间复杂度:O(SEG_COUNT)

data_struct_study/src/binary_search_tree_problem/Solution_1.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package binary_search_tree_problem;
22

3+
34
/**
45
* 二叉树根节点到所有叶子节点的路径之和:
5-
*
66
* 先序遍历的思想(根左右)+数字求和(每一层都比上层和*10+当前根节点的值)
77
* 时间复杂度:O(n)
88
* 空间复杂度:O(n)

data_struct_study/src/binary_search_tree_problem/Solution_2.java

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.util.*;
44

5+
56
/**
67
* 题目描述:请实现一个函数按照之字形打印二叉树,即第一行按照
78
* 从左到右的顺序打印,第二层按照从右至左的顺序打印,

data_struct_study/src/dynamic_problem/Solution1143.java

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.util.Arrays;
44

5+
56
/**
67
* 题目描述:给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。
78
* 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的

data_struct_study/src/dynamic_problem/Solution1143_2.java

+1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package dynamic_problem;
22

3+
34
/**
45
* 2、记忆化数组 + DP(自下而上):躲避边界条件
56
* 时间复杂度:O((len(s1) * len(s2))

data_struct_study/src/dynamic_problem/Solution121.java

+1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package dynamic_problem;
22

3+
34
/**
45
* 题目描述:
56
* 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。

0 commit comments

Comments
 (0)