Skip to content

Commit e5a599a

Browse files
committed
feat: add python and java solutions to lcof question
添加《剑指 Offer》题解:面试题66. 构建乘积数组
1 parent da4c1f1 commit e5a599a

File tree

10 files changed

+226
-1
lines changed

10 files changed

+226
-1
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
</p>
1414

1515
## 介绍
16-
本项目包含 [LeetCode](https://leetcode-cn.com/problemset/all/)[《剑指 Offer(第 2 版)》](https://leetcode-cn.com/problemset/lcof/)[《程序员面试金典(第 6 版)》](https://leetcode-cn.com/problemset/lcci/)等题目的相关题解。所有题解均由多种编程语言实现,包括但不限于:Java、Python、C++、JavaScript、C#、Go,日常更新。
16+
本项目包含 [LeetCode](https://leetcode-cn.com/problemset/all/)[《剑指 Offer(第 2 版)》](https://leetcode-cn.com/problemset/lcof/)[《程序员面试金典(第 6 版)》](https://leetcode-cn.com/problemset/lcci/)等题目的相关题解。所有题解均由多种编程语言实现,包括但不限于:Java、Python、C++、JavaScript、C#、Go,日常更新。欢迎 [Star](https://github.com/doocs/leetcode) 关注本项目,获取项目最新动态。
1717

1818
[English Version](/README_EN.md)
1919

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
# [面试题41. 数据流中的中位数](https://leetcode-cn.com/problems/shu-ju-liu-zhong-de-zhong-wei-shu-lcof/)
2+
3+
## 题目描述
4+
<!-- 这里写题目描述 -->
5+
如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。
6+
7+
例如,
8+
9+
`[2,3,4]` 的中位数是 3
10+
11+
`[2,3]` 的中位数是 (2 + 3) / 2 = 2.5
12+
13+
设计一个支持以下两种操作的数据结构:
14+
15+
- void addNum(int num) - 从数据流中添加一个整数到数据结构中。
16+
- double findMedian() - 返回目前所有元素的中位数。
17+
18+
**示例 1:**
19+
20+
```
21+
输入:
22+
["MedianFinder","addNum","addNum","findMedian","addNum","findMedian"]
23+
[[],[1],[2],[],[3],[]]
24+
输出:[null,null,null,1.50000,null,2.00000]
25+
```
26+
27+
**示例 2:**
28+
29+
```
30+
输入:
31+
["MedianFinder","addNum","findMedian","addNum","findMedian"]
32+
[[],[2],[],[3],[]]
33+
输出:[null,null,2.00000,null,2.50000]
34+
```
35+
36+
**限制:**
37+
38+
- 最多会对 addNum、findMedia进行 50000 次调用。
39+
40+
注意:本题与主站 295 题相同:https://leetcode-cn.com/problems/find-median-from-data-stream/
41+
42+
## 解法
43+
<!-- 这里可写通用的实现逻辑 -->
44+
45+
46+
### Python3
47+
<!-- 这里可写当前语言的特殊实现逻辑 -->
48+
49+
```python
50+
51+
```
52+
53+
### Java
54+
<!-- 这里可写当前语言的特殊实现逻辑 -->
55+
56+
```java
57+
58+
```
59+
60+
### ...
61+
```
62+
63+
```

lcof/面试题41. 数据流中的中位数/Solution.java

Whitespace-only changes.

lcof/面试题41. 数据流中的中位数/Solution.py

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# [面试题43. 1~n整数中1出现的次数](https://leetcode-cn.com/problems/1nzheng-shu-zhong-1chu-xian-de-ci-shu-lcof/)
2+
3+
## 题目描述
4+
<!-- 这里写题目描述 -->
5+
输入一个整数 `n` ,求1~n这n个整数的十进制表示中1出现的次数。
6+
7+
例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。
8+
9+
**示例 1:**
10+
11+
```
12+
输入:n = 12
13+
输出:5
14+
```
15+
16+
**示例 2:**
17+
18+
```
19+
输入:n = 13
20+
输出:6
21+
```
22+
23+
**限制:**
24+
25+
- `1 <= n < 2^31`
26+
27+
注意:本题与主站 233 题相同:https://leetcode-cn.com/problems/number-of-digit-one/
28+
29+
## 解法
30+
<!-- 这里可写通用的实现逻辑 -->
31+
32+
33+
### Python3
34+
<!-- 这里可写当前语言的特殊实现逻辑 -->
35+
36+
```python
37+
38+
```
39+
40+
### Java
41+
<!-- 这里可写当前语言的特殊实现逻辑 -->
42+
43+
```java
44+
45+
```
46+
47+
### ...
48+
```
49+
50+
```

lcof/面试题43. 1~n整数中1出现的次数/Solution.java

Whitespace-only changes.

lcof/面试题43. 1~n整数中1出现的次数/Solution.py

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
# [面试题66. 构建乘积数组](https://leetcode-cn.com/problems/gou-jian-cheng-ji-shu-zu-lcof/)
2+
3+
## 题目描述
4+
<!-- 这里写题目描述 -->
5+
6+
给定一个数组 `A[0,1,…,n-1]`,请构建一个数组 `B[0,1,…,n-1]`,其中 B 中的元素 `B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]`。不能使用除法。
7+
8+
**示例:**
9+
10+
```
11+
输入: [1,2,3,4,5]
12+
输出: [120,60,40,30,24]
13+
```
14+
15+
**提示:**
16+
17+
- 所有元素乘积之和不会溢出 32 位整数
18+
- `a.length <= 100000`
19+
20+
21+
## 解法
22+
<!-- 这里可写通用的实现逻辑 -->
23+
`B[i] = (A[0] * A[1] * ... * A[i-1]) * (A[i+1] * ... * A[n-1])`
24+
25+
### Python3
26+
<!-- 这里可写当前语言的特殊实现逻辑 -->
27+
28+
```python
29+
class Solution:
30+
def constructArr(self, a: List[int]) -> List[int]:
31+
if not a:
32+
return []
33+
dp1 = [1 for i in a]
34+
dp2 = [1 for i in a]
35+
n = len(a)
36+
dp1[0], dp2[n - 1] = a[0], a[n - 1]
37+
for i in range(1, n):
38+
dp1[i] = dp1[i - 1] * a[i]
39+
for i in range(n - 2, -1, -1):
40+
dp2[i] = dp2[i + 1] * a[i]
41+
return [(1 if i - 1 < 0 else dp1[i - 1]) * (1 if i + 1 >= n else dp2[i + 1]) for i in range(0, n)]
42+
```
43+
44+
### Java
45+
<!-- 这里可写当前语言的特殊实现逻辑 -->
46+
47+
```java
48+
class Solution {
49+
public int[] constructArr(int[] a) {
50+
if (a == null || a.length == 0) {
51+
return new int[0];
52+
}
53+
int n = a.length;
54+
int[] dp1 = new int[n];
55+
int[] dp2 = new int[n];
56+
dp1[0] = a[0];
57+
dp2[n - 1] = a[n - 1];
58+
for (int i = 1; i < n; ++i) {
59+
dp1[i] = dp1[i - 1] * a[i];
60+
}
61+
for (int i = n - 2; i >= 0; --i) {
62+
dp2[i] = dp2[i + 1] * a[i];
63+
}
64+
int[] res = new int[n];
65+
for (int i = 0; i < n; ++i) {
66+
res[i] = (i - 1 < 0 ? 1 : dp1[i - 1]) * (i + 1 >= n ? 1 : dp2[i + 1]);
67+
}
68+
return res;
69+
}
70+
}
71+
```
72+
73+
### ...
74+
```
75+
76+
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
class Solution {
2+
public int[] constructArr(int[] a) {
3+
if (a == null || a.length == 0) {
4+
return new int[0];
5+
}
6+
int n = a.length;
7+
int[] dp1 = new int[n];
8+
int[] dp2 = new int[n];
9+
dp1[0] = a[0];
10+
dp2[n - 1] = a[n - 1];
11+
for (int i = 1; i < n; ++i) {
12+
dp1[i] = dp1[i - 1] * a[i];
13+
}
14+
for (int i = n - 2; i >= 0; --i) {
15+
dp2[i] = dp2[i + 1] * a[i];
16+
}
17+
int[] res = new int[n];
18+
for (int i = 0; i < n; ++i) {
19+
res[i] = (i - 1 < 0 ? 1 : dp1[i - 1]) * (i + 1 >= n ? 1 : dp2[i + 1]);
20+
}
21+
return res;
22+
}
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution:
2+
def constructArr(self, a: List[int]) -> List[int]:
3+
if not a:
4+
return []
5+
dp1 = [1 for i in a]
6+
dp2 = [1 for i in a]
7+
n = len(a)
8+
dp1[0], dp2[n - 1] = a[0], a[n - 1]
9+
for i in range(1, n):
10+
dp1[i] = dp1[i - 1] * a[i]
11+
for i in range(n - 2, -1, -1):
12+
dp2[i] = dp2[i + 1] * a[i]
13+
return [(1 if i - 1 < 0 else dp1[i - 1]) * (1 if i + 1 >= n else dp2[i + 1]) for i in range(0, n)]

0 commit comments

Comments
 (0)