Skip to content

Commit 00f821a

Browse files
committed
feat: add solutions to lcci question: 17.04.Missing Number
* Question: https://leetcode-cn.com/problems/missing-number-lcci * Solutions: https://lc.netlify.com/#/lcci/17.04.Missing%20Number/README
1 parent f0818df commit 00f821a

File tree

6 files changed

+123
-56
lines changed

6 files changed

+123
-56
lines changed

lcci/17.04.Missing Number/README.md

+20-3
Original file line numberDiff line numberDiff line change
@@ -22,20 +22,37 @@
2222

2323
## 解法
2424
<!-- 这里可写通用的实现逻辑 -->
25-
25+
利用异或的特性,`res = res ^ x ^ x`。对同一个值异或两次,结果等于它本身。最后异或的结果,就是只出现一次的数字,即数组中缺失的整数。
2626

2727
### Python3
2828
<!-- 这里可写当前语言的特殊实现逻辑 -->
2929

3030
```python
31-
31+
class Solution:
32+
def missingNumber(self, nums: List[int]) -> int:
33+
res = 0
34+
for i, num in enumerate(nums):
35+
res ^= i
36+
res ^= num
37+
res ^= len(nums)
38+
return res
3239
```
3340

3441
### Java
3542
<!-- 这里可写当前语言的特殊实现逻辑 -->
3643

3744
```java
38-
45+
class Solution {
46+
public int missingNumber(int[] nums) {
47+
int res = 0, n = nums.length;
48+
for (int i = 0; i < n; ++i) {
49+
res ^= i;
50+
res ^= nums[i];
51+
}
52+
res ^= n;
53+
return res;
54+
}
55+
}
3956
```
4057

4158
### ...
+78-43
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,78 @@
1-
# [17.04. Missing Number](https://leetcode-cn.com/problems/missing-number-lcci)
2-
3-
## Description
4-
<p>An array&nbsp;contains all the integers from 0 to n, except for one number which is missing.&nbsp; Write code to find the missing integer. Can you do it in O(n) time?</p>
5-
6-
<p><strong>Note: </strong>This problem is slightly different from the original one the book.</p>
7-
8-
<p><strong>Example 1: </strong></p>
9-
10-
<pre>
11-
<strong>Input: </strong>[3,0,1]
12-
<strong>Output: </strong>2</pre>
13-
14-
<p>&nbsp;</p>
15-
16-
<p><strong>Example 2: </strong></p>
17-
18-
<pre>
19-
<strong>Input: </strong>[9,6,4,2,3,5,7,0,1]
20-
<strong>Output: </strong>8
21-
</pre>
22-
23-
24-
25-
## Solutions
26-
27-
28-
### Python3
29-
30-
```python
31-
32-
```
33-
34-
### Java
35-
36-
```java
37-
38-
```
39-
40-
### ...
41-
```
42-
43-
```
1+
# [17.04. Missing Number](https://leetcode-cn.com/problems/missing-number-lcci)
2+
3+
## Description
4+
<p>An array&nbsp;contains all the integers from 0 to n, except for one number which is missing.&nbsp; Write code to find the missing integer. Can you do it in O(n) time?</p>
5+
6+
7+
8+
<p><strong>Note: </strong>This problem is slightly different from the original one the book.</p>
9+
10+
11+
12+
<p><strong>Example 1: </strong></p>
13+
14+
15+
16+
<pre>
17+
18+
<strong>Input: </strong>[3,0,1]
19+
20+
<strong>Output: </strong>2</pre>
21+
22+
23+
24+
<p>&nbsp;</p>
25+
26+
27+
28+
<p><strong>Example 2: </strong></p>
29+
30+
31+
32+
<pre>
33+
34+
<strong>Input: </strong>[9,6,4,2,3,5,7,0,1]
35+
36+
<strong>Output: </strong>8
37+
38+
</pre>
39+
40+
41+
42+
43+
## Solutions
44+
45+
46+
### Python3
47+
48+
```python
49+
class Solution:
50+
def missingNumber(self, nums: List[int]) -> int:
51+
res = 0
52+
for i, num in enumerate(nums):
53+
res ^= i
54+
res ^= num
55+
res ^= len(nums)
56+
return res
57+
```
58+
59+
### Java
60+
61+
```java
62+
class Solution {
63+
public int missingNumber(int[] nums) {
64+
int res = 0, n = nums.length;
65+
for (int i = 0; i < n; ++i) {
66+
res ^= i;
67+
res ^= nums[i];
68+
}
69+
res ^= n;
70+
return res;
71+
}
72+
}
73+
```
74+
75+
### ...
76+
```
77+
78+
```
+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
class Solution {
2+
public int missingNumber(int[] nums) {
3+
int res = 0, n = nums.length;
4+
for (int i = 0; i < n; ++i) {
5+
res ^= i;
6+
res ^= nums[i];
7+
}
8+
res ^= n;
9+
return res;
10+
}
11+
}

lcci/17.04.Missing Number/Solution.py

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
class Solution:
2+
def missingNumber(self, nums: List[int]) -> int:
3+
res = 0
4+
for i, num in enumerate(nums):
5+
res ^= i
6+
res ^= num
7+
res ^= len(nums)
8+
return res

lcof/面试题19. 正则表达式匹配/README.md

+3-9
Original file line numberDiff line numberDiff line change
@@ -62,16 +62,10 @@ p = "mis*is*p*."
6262
现在如果已知了 `dp[i-1][j-1]` 的状态,我们该如何确定 `dp[i][j]` 的状态呢?我们可以分三种情况讨论,其中,前两种情况考虑了所有能匹配的情况,剩下的就是不能匹配的情况了:
6363

6464
1. `s[i] == p[j]` or `p[j] == '.'`:比如 ab**b** 和 ab**b**,或者 ab**b** 和 ab. ,很容易得到 `dp[i][j]` = `dp[i-1][j-1]` = True。因为 ab 和 ab 是匹配的,如果后面分别加一个 b,或者 s 加一个 b 而 p 加一个 `.` ,仍然是匹配的。
65-
6665
2. `p[j] == '*'`:当 `p[j] == '*'` 时,由于 `*` 与前面的字符相关,因此我们比较 `*` 前面的字符 `p[j-1]``s[i]` 的关系。根据 `*` 前面的字符与 s[i] 是否相等,又可分为以下两种情况:
67-
68-
- `p[j-1] != s[i]`:如果 `*` 前一个字符匹配不上,`*` 匹配了 0 次,应忽略这两个字符,看 `p[j-2]``s[i]` 是否匹配。 这时 `dp[i][j] = dp[i][j-2]`
69-
70-
- `p[j-1] == s[i]` or `p[j-1] == '.'``*` 前面的字符可以与 s[i] 匹配,这种情况下,`*` 可能匹配了前面的字符的 0 个,也可能匹配了前面字符的多个,当匹配 0 个时,如 `ab``abb*`,或者 `ab``ab.*` ,这时我们需要去掉 p 中的 `b*``.*` 后进行比较,即 `dp[i][j] = dp[i][j-2]`;当匹配多个时,如 `abbb``ab*`,或者 `abbb``a.*`,我们需要将 s[i] 前面的与 p 重新比较,即 `dp[i][j] = dp[i-1][j]`
71-
72-
3. 其他情况:以上两种情况把能匹配的都考虑全面了,所以其他情况为不匹配,即 `dp[i][j] = False`
73-
74-
注:递归法超时。
66+
- `p[j-1] != s[i]`:如果 `*` 前一个字符匹配不上,`*` 匹配了 0 次,应忽略这两个字符,看 `p[j-2]``s[i]` 是否匹配。 这时 `dp[i][j] = dp[i][j-2]`
67+
- `p[j-1] == s[i]` or `p[j-1] == '.'``*` 前面的字符可以与 s[i] 匹配,这种情况下,`*` 可能匹配了前面的字符的 0 个,也可能匹配了前面字符的多个,当匹配 0 个时,如 `ab``abb*`,或者 `ab``ab.*` ,这时我们需要去掉 p 中的 `b*``.*` 后进行比较,即 `dp[i][j] = dp[i][j-2]`;当匹配多个时,如 `abbb``ab*`,或者 `abbb``a.*`,我们需要将 s[i] 前面的与 p 重新比较,即 `dp[i][j] = dp[i-1][j]`
68+
3. 其他情况:以上两种情况把能匹配的都考虑全面了,所以其他情况为不匹配,即 `dp[i][j] = False`
7569

7670
### Python3
7771
```python

lcof/面试题61. 扑克牌中的顺子/README.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,13 @@
2222

2323
- 数组长度为 5 
2424
- 数组的数取值为 `[0, 13]`
25+
2526
## 解法
2627
<!-- 这里可写通用的实现逻辑 -->
28+
2729
用数组 t 记录是否存在重复的数,存在则直接返回 false。
2830

29-
遍历数组,忽略大小王(0),求出数组的最大、最小值。若差值超过 4,则无法构成顺子,例如:`5,6,(0),8,10`
31+
遍历数组,忽略大小王(0),求出数组的最大、最小值。若最后差值超过 4,则无法构成顺子,例如:`5,6,(0),8,10`
3032

3133
### Python3
3234
<!-- 这里可写当前语言的特殊实现逻辑 -->

0 commit comments

Comments
 (0)