Skip to content

Commit 24b62a9

Browse files
committedSep 6, 2022
style: update format options
1 parent 85a0a76 commit 24b62a9

File tree

12 files changed

+33
-32
lines changed

12 files changed

+33
-32
lines changed
 

‎.clang-format

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ AllowShortLambdasOnASingleLine: All
1818
AllowShortIfStatementsOnASingleLine: true
1919
AllowShortLoopsOnASingleLine: true
2020
AlwaysBreakAfterDefinitionReturnType: None
21-
AlwaysBreakAfterReturnType: TopLevelDefinitions
21+
AlwaysBreakAfterReturnType: None
2222
AlwaysBreakBeforeMultilineStrings: false
2323
AlwaysBreakTemplateDeclarations: MultiLine
2424
BinPackArguments: true

‎basic/searching/BinarySearch/README.md

+2-4
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,10 @@ int search(int left, int right) {
2525
### 模板 2
2626

2727
```java
28-
boolean
29-
check(int x) {
28+
boolean check(int x) {
3029
}
3130

32-
int
33-
search(int left, int right) {
31+
int search(int left, int right) {
3432
while (left < right) {
3533
int mid = (left + right + 1) >> 1;
3634
if (check(mid)) {

‎basic/searching/BinarySearch/README_EN.md

+2-4
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,10 @@ int search(int left, int right) {
2323
### Template 2
2424

2525
```java
26-
boolean
27-
check(int x) {
26+
boolean check(int x) {
2827
}
2928

30-
int
31-
search(int left, int right) {
29+
int search(int left, int right) {
3230
while (left < right) {
3331
int mid = (left + right + 1) >> 1;
3432
if (check(mid)) {

‎basic/sorting/CountingSort/CountingSort.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
public static void
2-
sort(int[] nums, int min, int max) {
1+
public static void sort(int[] nums, int min, int max) {
32
int n = nums.length;
43
int k = max - min + 1;
54
int[] c = new int[k];

‎basic/sorting/CountingSort/README.md

+1-2
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,7 @@
1717
### **Java**
1818

1919
```java
20-
public static void
21-
sort(int[] nums, int min, int max) {
20+
public static void sort(int[] nums, int min, int max) {
2221
int[] c = new int[max - min + 1];
2322
for (int v : nums) {
2423
c[v - min]++;

‎solution/0000-0099/0001.Two Sum/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959

6060
遍历数组,当发现 `target - nums[i]` 在哈希表中,说明找到了目标值。
6161

62-
时间复杂度 $O(n)$,空间复杂度 $O(n)$。
62+
时间复杂度 $O(n)$,空间复杂度 $O(n)$。其中 $n$ 是数组 `nums` 的长度。
6363

6464
<!-- tabs:start -->
6565

‎solution/0000-0099/0002.Add Two Numbers/README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,9 @@
5252

5353
**方法一:模拟**
5454

55-
同时遍历两个链表 $l1$, $l2$,对应节点值相加,进位记为 $carry$。当 $l1$, $l2$ 同时遍历结束,并且 $carry$$0$ 时,结束遍历。
55+
同时遍历两个链表 `l1`, `l2`,对应节点值相加,进位记为 `carry`。当 `l1`, `l2` 同时遍历结束,并且 `carry``0` 时,结束遍历。
5656

57-
时间复杂度 $O(max(m, n))$,其中 $m$, $n$ 分别表示两个链表的长度。忽略结果链表的空间消耗,空间复杂度 $O(1)$。
57+
时间复杂度 $O(\max(m, n))$,其中 $m$, $n$ 分别表示两个链表的长度。忽略结果链表的空间消耗,空间复杂度 $O(1)$。
5858

5959
<!-- tabs:start -->
6060

‎solution/0000-0099/0003.Longest Substring Without Repeating Characters/README.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,13 @@
5050

5151
**方法一:双指针 + 哈希表**
5252

53-
定义一个哈希表记录当前窗口内出现的字符,记 $i$ 和 $j$ 分别表示不重复子串的开始位置和结束位置,无重复字符子串的最大长度记为 $ans$
53+
定义一个哈希表记录当前窗口内出现的字符,记 $i$ 和 $j$ 分别表示不重复子串的开始位置和结束位置,无重复字符子串的最大长度记为 `ans`
5454

55-
遍历字符串 $s$ 的每个字符 $s[j]$,我们记为 $c$。若 $s[i..j-1]$ 窗口内存在 $c$,则 $i$ 循环向右移动,更新哈希表,直至 $s[i..j-1]$ 窗口不存在 $c$,循环结束。将 $c$ 加入哈希表中,此时 $s[i..j]$ 窗口内不含重复元素,更新 $ans$ 的最大值 $ans = max(ans, j - i + 1)$
55+
遍历字符串 `s` 的每个字符 $s[j]$,我们记为 $c$。若 $s[i..j-1]$ 窗口内存在 $c$,则 $i$ 循环向右移动,更新哈希表,直至 $s[i..j-1]$ 窗口不存在 `c`,循环结束。将 `c` 加入哈希表中,此时 $s[i..j]$ 窗口内不含重复元素,更新 `ans` 的最大值。
5656

57-
最后返回 $ans$ 即可。
57+
最后返回 `ans` 即可。
5858

59-
时间复杂度 $O(n)$,其中 $n$ 表示字符串 $s$ 的长度。
59+
时间复杂度 $O(n)$,其中 $n$ 表示字符串 `s` 的长度。
6060

6161
双指针算法模板:
6262

‎solution/0000-0099/0004.Median of Two Sorted Arrays/README.md

+11-6
Original file line numberDiff line numberDiff line change
@@ -47,17 +47,22 @@
4747

4848
<!-- 这里可写通用的实现逻辑 -->
4949

50-
本题限制了时间复杂度为 `O(log (m+n))`,看到这个时间复杂度,自然而然的想到了应该使用二分查找法来求解。那么回顾一下中位数的定义,如果某个有序数组长度是奇数,那么其中位数就是最中间那个,如果是偶数,那么就是最中间两个数字的平均值。这里对于两个有序数组也是一样的,假设两个有序数组的长度分别为 m 和 n,由于两个数组长度之和 m+n 的奇偶不确定,因此需要分情况来讨论,对于奇数的情况,直接找到最中间的数即可,偶数的话需要求最中间两个数的平均值。为了简化代码,不分情况讨论,我们使用一个小 trick,我们分别找第 `(m+n+1) / 2` 个,和 `(m+n+2) / 2` 个,然后求其平均值即可,这对奇偶数均适用。假如 m+n 为奇数的话,那么其实 `(m+n+1) / 2``(m+n+2) / 2` 的值相等,相当于两个相同的数字相加再除以 2,还是其本身。
50+
**方法一:分治**
5151

52-
这里我们需要定义一个函数来在两个有序数组中找到第 K 个元素,下面重点来看如何实现找到第 K 个元素
52+
本题限制了时间复杂度为 $O(\log (m+n))$,看到这个时间复杂度,自然而然的想到了应该使用二分查找法来求解。那么回顾一下中位数的定义,如果某个有序数组长度是奇数,那么其中位数就是最中间那个,如果是偶数,那么就是最中间两个数字的平均值。这里对于两个有序数组也是一样的,假设两个有序数组的长度分别为 $m$ 和 $n$,由于两个数组长度之和 $m+n$ 的奇偶不确定,因此需要分情况来讨论,对于奇数的情况,直接找到最中间的数即可,偶数的话需要求最中间两个数的平均值。为了简化代码,不分情况讨论,我们使用一个小 trick,我们分别找第 $\frac{m+n+1}{2}$ 和 $\frac{m+n+2}{2}$ 个,然后求其平均值即可,这对奇偶数均适用。假如 $m+n$ 为奇数的话,那么其实 $\frac{m+n+1}{2}$ 和 $\frac{m+n+2}{2}$ 的值相等,相当于两个相同的数字相加再除以 2,还是其本身
5353

54-
首先,为了避免产生新的数组从而增加时间复杂度,我们使用两个变量 i 和 j 分别来标记数组 nums1 和 nums2 的起始位置。然后来处理一些边界问题,比如当某一个数组的起始位置大于等于其数组长度时,说明其所有数字均已经被淘汰了,相当于一个空数组了,那么实际上就变成了在另一个数组中找数字,直接就可以找出来了。还有就是如果 K=1 的话,那么我们只要比较 nums1 和 nums2 的起始位置 i 和 j 上的数字就可以了。
5554

56-
难点就在于一般的情况怎么处理?因为我们需要在两个有序数组中找到第 K 个元素,为了加快搜索的速度,我们要使用二分法,对 K 二分,意思是我们需要分别在 nums1 和 nums2 中查找第 K/2 个元素,注意这里由于两个数组的长度不定,所以有可能某个数组没有第 K/2 个数字,所以我们需要先检查一下,数组中到底存不存在第 K/2 个数字,如果存在就取出来,否则就赋值上一个整型最大值。如果某个数组没有第 K/2 个数字,那么我们就淘汰另一个数字的前 K/2 个数字即可。有没有可能两个数组都不存在第 K/2 个数字呢,这道题里是不可能的,因为我们的 K 不是任意给的,而是给的 m+n 的中间值,所以必定至少会有一个数组是存在第 K/2 个数字的
55+
这里我们需要定义一个函数来在两个有序数组中找到第 $k$ 个元素,下面重点来看如何实现找到第 $k$ 个元素。
5756

58-
最后是二分法的核心,比较这两个数组的第 K/2 小的数字 midVal1 和 midVal2 的大小,如果第一个数组的第 K/2 个数字小的话,那么说明我们要找的数字肯定不在 nums1 中的前 K/2 个数字,所以我们可以将其淘汰,将 nums1 的起始位置向后移动 K/2 个,并且此时的 K 也自减去 K/2,调用递归。反之,我们淘汰 nums2 中的前 K/2 个数字,并将 nums2 的起始位置向后移动 K/2 个,并且此时的 K 也自减去 K/2,调用递归即可
57+
首先,为了避免产生新的数组从而增加时间复杂度,我们使用两个变量 $i$ 和 $j$ 分别来标记数组 `nums1``nums2` 的起始位置。然后来处理一些边界问题,比如当某一个数组的起始位置大于等于其数组长度时,说明其所有数字均已经被淘汰了,相当于一个空数组了,那么实际上就变成了在另一个数组中找数字,直接就可以找出来了。还有就是如果 $k=1$ 的话,那么我们只要比较 `nums1``nums2` 的起始位置 $i$ 和 $j$ 上的数字就可以了
5958

60-
> 实际是比较两个数组中的第 K/2 个数字哪一个可能到达最后合并后排序数组中的第 K 个元素的位置,其中小的那个数字注定不可能到达,所以可以直接将小的元素对应的数组的前 K/2 个数字淘汰。
59+
难点就在于一般的情况怎么处理?因为我们需要在两个有序数组中找到第 $k$ 个元素,为了加快搜索的速度,我们要使用二分法,对 $k$ 二分,意思是我们需要分别在 `nums1` 和 `nums2` 中查找第 $\left \lfloor \frac{k}{2} \right \rfloor$ 个元素,注意这里由于两个数组的长度不定,所以有可能某个数组没有第 $\left \lfloor \frac{k}{2} \right \rfloor$ 个数字,所以我们需要先检查一下,数组中到底存不存在第 $\left \lfloor \frac{k}{2} \right \rfloor$ 个数字,如果存在就取出来,否则就赋值上一个整型最大值。如果某个数组没有第 $\left \lfloor \frac{k}{2} \right \rfloor$ 个数字,那么我们就淘汰另一个数字的前 $\left \lfloor \frac{k}{2} \right \rfloor$ 个数字即可。有没有可能两个数组都不存在第 $\left \lfloor \frac{k}{2} \right \rfloor$ 个数字呢,这道题里是不可能的,因为我们的 $k$ 不是任意给的,而是给的 $m+n$ 的中间值,所以必定至少会有一个数组是存在第 $\left \lfloor \frac{k}{2} \right \rfloor$ 个数字的。
60+
61+
最后是二分法的核心,比较这两个数组的第 $\left \lfloor \frac{k}{2} \right \rfloor$ 小的数字 `midVal1``midVal2` 的大小,如果第一个数组的第 $\left \lfloor \frac{k}{2} \right \rfloor$ 个数字小的话,那么说明我们要找的数字肯定不在 `nums1` 中的前 $\left \lfloor \frac{k}{2} \right \rfloor$ 个数字,所以我们可以将其淘汰,将 `nums1` 的起始位置向后移动 $\left \lfloor \frac{k}{2} \right \rfloor$ 个,并且此时的 $k$ 也自减去 $\left \lfloor \frac{k}{2} \right \rfloor$,调用递归。反之,我们淘汰 `nums2` 中的前 $\left \lfloor \frac{k}{2} \right \rfloor$ 个数字,并将 `nums2` 的起始位置向后移动 $\left \lfloor \frac{k}{2} \right \rfloor$ 个,并且此时的 $k$ 也自减去 $\left \lfloor \frac{k}{2} \right \rfloor$,调用递归即可。
62+
63+
> 实际是比较两个数组中的第 $\left \lfloor \frac{k}{2} \right \rfloor$ 个数字哪一个可能到达最后合并后排序数组中的第 $k$ 个元素的位置,其中小的那个数字注定不可能到达,所以可以直接将小的元素对应的数组的前 $\left \lfloor \frac{k}{2} \right \rfloor$ 个数字淘汰。
64+
65+
时间复杂度 $O(\log (m+n))$,其中 $m$ 和 $n$ 是两个数组的长度。
6166

6267
<!-- tabs:start -->
6368

‎solution/0000-0099/0005.Longest Palindromic Substring/README.md

+6-4
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,14 @@
3838

3939
<!-- 这里可写通用的实现逻辑 -->
4040

41-
动态规划法。
41+
**方法一:动态规划**
4242

43-
`dp[i][j]` 表示字符串 `s[i..j]` 是否为回文串。
43+
$dp[i][j]$ 表示字符串 $s[i..j]$ 是否为回文串。
4444

45-
-`j - i < 2`,即字符串长度为 2 时,只要 `s[i] == s[j]``dp[i][j]` 就为 true。
46-
-`j - i >= 2``dp[i][j] = dp[i + 1][j - 1] && s[i] == s[j]`
45+
- 当 $j - i \lt 2$,即字符串长度为 `2` 时,只要 $s[i] == s[j]$,那么 $dp[i][j]$ 就为 `true`
46+
- 当 $j - i \ge 2$,有 $dp[i][j] = dp[i + 1][j - 1] \cap s[i] == s[j]$。
47+
48+
时间复杂度 $O(n^2)$,空间复杂度 $O(n^2)$。
4749

4850
<!-- tabs:start -->
4951

‎solution/0900-0999/0983.Minimum Cost For Tickets/Solution.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
class Solution {
2-
private static final int[] T = new int[]{1, 7, 30};
2+
private static final int[] T = new int[] {1, 7, 30};
33
private int[] costs;
44
private int[] days;
55
private int[] f;

‎solution/2300-2399/2399.Check Distances Between Same Letters/Solution.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
bool checkDistances(char *s, int *distance, int distanceSize) {
1+
bool checkDistances(char* s, int* distance, int distanceSize) {
22
int n = strlen(s);
33
int d[26] = {0};
44
for (int i = 0; i < n; i++) {

0 commit comments

Comments
 (0)