Skip to content

Commit fa422f4

Browse files
committed
feat: refresh README files
1 parent 65e6c5b commit fa422f4

File tree

1,389 files changed

+65320
-10921
lines changed

Some content is hidden

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

1,389 files changed

+65320
-10921
lines changed

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

+15-26
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,36 @@
1-
# [1. 两数之和](https://leetcode-cn.com/problems/two-sum/)
1+
# [1. 两数之和](https://leetcode-cn.com/problems/two-sum)
22

33
## 题目描述
44
<!-- 这里写题目描述 -->
5+
<p>给定一个整数数组 <code>nums</code>&nbsp;和一个目标值 <code>target</code>,请你在该数组中找出和为目标值的那&nbsp;<strong>两个</strong>&nbsp;整数,并返回他们的数组下标。</p>
56

6-
给定一个整数数组 `nums` 和一个目标值 `target`,请你在该数组中找出和为目标值的那**两个**整数,并返回他们的数组下标。
7+
<p>你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。</p>
78

8-
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
9+
<p><strong>示例:</strong></p>
910

10-
**示例:**
11+
<pre>给定 nums = [2, 7, 11, 15], target = 9
12+
13+
因为 nums[<strong>0</strong>] + nums[<strong>1</strong>] = 2 + 7 = 9
14+
所以返回 [<strong>0, 1</strong>]
15+
</pre>
1116

12-
```
13-
给定 nums = [2, 7, 11, 15], target = 9
1417

15-
因为 nums[0] + nums[1] = 2 + 7 = 9
16-
所以返回 [0, 1]
17-
```
1818

1919
## 解法
2020
<!-- 这里可写通用的实现逻辑 -->
21-
利用 HashMap 记录数组元素值和对应的下标,对于一个数 nums[i],判断 `target - nums[i]` 是否存在 HashMap 中,存在的话,返回两个下标组成的数组。注意,已存在的元素下标在前,当前元素下标在后。
2221

23-
### Java
22+
23+
### Python3
2424
<!-- 这里可写当前语言的特殊实现逻辑 -->
2525

26-
```java
27-
class Solution {
28-
public int[] twoSum(int[] nums, int target) {
29-
Map<Integer, Integer> map = new HashMap<>();
30-
for (int i = 0; i < nums.length; ++i) {
31-
if (map.containsKey(target - nums[i])) {
32-
return new int[] {map.get(target - nums[i]), i};
33-
}
34-
map.put(nums[i], i);
35-
}
36-
return null;
37-
}
38-
}
26+
```python
27+
3928
```
4029

41-
### Python3
30+
### Java
4231
<!-- 这里可写当前语言的特殊实现逻辑 -->
4332

44-
```python
33+
```java
4534

4635
```
4736

Original file line numberDiff line numberDiff line change
@@ -1,93 +1,41 @@
1-
# [2. 两数相加](https://leetcode-cn.com/problems/add-two-numbers/)
1+
# [2. 两数相加](https://leetcode-cn.com/problems/add-two-numbers)
22

33
## 题目描述
44
<!-- 这里写题目描述 -->
5-
给出两个**非空**的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储**一位**数字。
5+
<p>给出两个&nbsp;<strong>非空</strong> 的链表用来表示两个非负的整数。其中,它们各自的位数是按照&nbsp;<strong>逆序</strong>&nbsp;的方式存储的,并且它们的每个节点只能存储&nbsp;<strong>一位</strong>&nbsp;数字。</p>
66

7-
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
7+
<p>如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。</p>
88

9-
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
9+
<p>您可以假设除了数字 0 之外,这两个数都不会以 0&nbsp;开头。</p>
10+
11+
<p><strong>示例:</strong></p>
12+
13+
<pre><strong>输入:</strong>(2 -&gt; 4 -&gt; 3) + (5 -&gt; 6 -&gt; 4)
14+
<strong>输出:</strong>7 -&gt; 0 -&gt; 8
15+
<strong>原因:</strong>342 + 465 = 807
16+
</pre>
1017

11-
**示例:**
1218

13-
```
14-
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
15-
输出:7 -> 0 -> 8
16-
原因:342 + 465 = 807
17-
```
1819

1920
## 解法
2021
<!-- 这里可写通用的实现逻辑 -->
21-
同时遍历两个链表,对应值相加(还有 quotient)求余数得到值并赋给新创建的结点。而商则用 quotient 存储,供下次相加。
22+
23+
24+
### Python3
25+
<!-- 这里可写当前语言的特殊实现逻辑 -->
26+
27+
```python
28+
29+
```
2230

2331
### Java
2432
<!-- 这里可写当前语言的特殊实现逻辑 -->
2533

2634
```java
27-
/**
28-
* Definition for singly-linked list.
29-
* public class ListNode {
30-
* int val;
31-
* ListNode next;
32-
* ListNode(int x) { val = x; }
33-
* }
34-
*/
35-
class Solution {
36-
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
37-
ListNode res = new ListNode(-1);
38-
ListNode cur = res;
39-
int quotient = 0;
40-
while (l1 != null || l2 != null || quotient != 0) {
41-
int t = (l1 == null ? 0 : l1.val) + (l2 == null ? 0 : l2.val) + quotient;
42-
quotient = t / 10;
43-
ListNode node = new ListNode(t % 10);
44-
cur.next = node;
45-
cur = node;
46-
l1 = (l1 == null) ? l1 : l1.next;
47-
l2 = (l2 == null) ? l2 : l2.next;
48-
}
49-
return res.next;
50-
}
51-
}
35+
36+
```
37+
38+
### ...
5239
```
5340
54-
### CPP
55-
```cpp
56-
class Solution {
57-
public:
58-
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
59-
60-
ListNode *ans_l = new ListNode(0);
61-
ListNode *head = ans_l;
62-
int tmp = 0;
63-
while(l1 != NULL && l2 != NULL){
64-
tmp += l1->val + l2->val;
65-
ans_l->next = new ListNode(tmp % 10);
66-
tmp = tmp / 10;
67-
ans_l = ans_l->next;
68-
l1 = l1->next;
69-
l2 = l2->next;
70-
}
71-
72-
while(l1 != NULL){
73-
tmp += l1->val;
74-
ans_l->next = new ListNode(tmp % 10);
75-
tmp = tmp / 10;
76-
ans_l = ans_l->next;
77-
l1 = l1->next;
78-
}
79-
80-
while(l2 != NULL){
81-
tmp += l2->val;
82-
ans_l->next = new ListNode(tmp % 10);
83-
tmp = tmp / 10;
84-
ans_l = ans_l->next;
85-
l2 = l2->next;
86-
}
87-
88-
if(tmp)ans_l->next = new ListNode(tmp);
89-
90-
return head->next;
91-
}
92-
};
9341
```

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

+29-46
Original file line numberDiff line numberDiff line change
@@ -1,66 +1,49 @@
1-
# [3. 无重复字符的最长子串](https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/)
1+
# [3. 无重复字符的最长子串](https://leetcode-cn.com/problems/longest-substring-without-repeating-characters)
22

33
## 题目描述
44
<!-- 这里写题目描述 -->
5-
给定一个字符串,请你找出其中不含有重复字符的**最长子串**的长度。
5+
<p>给定一个字符串,请你找出其中不含有重复字符的&nbsp;<strong>最长子串&nbsp;</strong>的长度。</p>
66

7-
**示例 1:**
7+
<p><strong>示例&nbsp;1:</strong></p>
88

9-
```
10-
输入: "abcabcbb"
11-
输出: 3
12-
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
13-
```
9+
<pre><strong>输入: </strong>&quot;abcabcbb&quot;
10+
<strong>输出: </strong>3
11+
<strong>解释:</strong> 因为无重复字符的最长子串是 <code>&quot;abc&quot;,所以其</code>长度为 3。
12+
</pre>
1413

15-
**示例 2:**
14+
<p><strong>示例 2:</strong></p>
1615

17-
```
18-
输入: "bbbbb"
19-
输出: 1
20-
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
21-
```
16+
<pre><strong>输入: </strong>&quot;bbbbb&quot;
17+
<strong>输出: </strong>1
18+
<strong>解释: </strong>因为无重复字符的最长子串是 <code>&quot;b&quot;</code>,所以其长度为 1。
19+
</pre>
20+
21+
<p><strong>示例 3:</strong></p>
22+
23+
<pre><strong>输入: </strong>&quot;pwwkew&quot;
24+
<strong>输出: </strong>3
25+
<strong>解释: </strong>因为无重复字符的最长子串是&nbsp;<code>&quot;wke&quot;</code>,所以其长度为 3。
26+
&nbsp; 请注意,你的答案必须是 <strong>子串 </strong>的长度,<code>&quot;pwke&quot;</code>&nbsp;是一个<em>子序列,</em>不是子串。
27+
</pre>
2228

23-
**示例 3:**
2429

25-
```
26-
输入: "pwwkew"
27-
输出: 3
28-
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
29-
  请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
30-
```
3130

3231
## 解法
3332
<!-- 这里可写通用的实现逻辑 -->
34-
利用指针 `p`, `q`,初始指向字符串开头。遍历字符串,`q` 向右移动,若指向的字符在 map 中,说明出现了重复字符,此时,`p` 要在出现**重复字符的下一个位置** `map.get(chars[q]) + 1`**当前位置** `p` 之间取较大值,防止 `p` 指针回溯。循环的过程中,要将 chars[q] 及对应位置放入 map 中,也需要不断计算出`max``q - p + 1` 的较大值,赋给 `max`。最后输出 `max` 即可。
33+
34+
35+
### Python3
36+
<!-- 这里可写当前语言的特殊实现逻辑 -->
37+
38+
```python
39+
40+
```
3541

3642
### Java
3743
<!-- 这里可写当前语言的特殊实现逻辑 -->
3844

3945
```java
40-
class Solution {
41-
public int lengthOfLongestSubstring(String s) {
42-
if (s == null || s.length() == 0) {
43-
return 0;
44-
}
45-
char[] chars = s.toCharArray();
46-
int len = chars.length;
47-
int p = 0, q = 0;
48-
int max = 0;
49-
Map<Character, Integer> map = new HashMap<>();
50-
while (q < len) {
51-
if (map.containsKey(chars[q])) {
52-
// 防止p指针回溯,导致计算到重复字符的长度
53-
// eg. abba,当q指向最右的a时,若简单把p赋为map.get(chars[q] + 1),则出现指针回溯
54-
p = Math.max(p, map.get(chars[q]) + 1);
55-
}
56-
map.put(chars[q], q);
57-
max = Math.max(max, q - p + 1);
58-
++q;
59-
}
60-
61-
return max;
62-
}
63-
}
46+
6447
```
6548

6649
### ...

0 commit comments

Comments
 (0)