Skip to content

Commit e6ff50b

Browse files
committedDec 31, 2020
feat: add solutions to leetcode and lcof problems
1 parent 6e5c7a7 commit e6ff50b

File tree

11 files changed

+185
-80
lines changed

11 files changed

+185
-80
lines changed
 

‎README.md

+1
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
1. [合并两个有序数组](/solution/0000-0099/0088.Merge%20Sorted%20Array/README.md)
5959
1. [寻找旋转排序数组中的最小值](/solution/0100-0199/0153.Find%20Minimum%20in%20Rotated%20Sorted%20Array/README.md)
6060
1. [寻找旋转排序数组中的最小值 II](/solution/0100-0199/0154.Find%20Minimum%20in%20Rotated%20Sorted%20Array%20II/README.md)
61+
1. [除自身以外数组的乘积](/solution/0200-0299/0238.Product%20of%20Array%20Except%20Self/README.md)
6162

6263
### 字符串
6364

‎README_EN.md

+1
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ Complete solutions to [LeetCode](https://leetcode-cn.com/problemset/all/), [LCOF
5757
1. [Merge Sorted Array](/solution/0000-0099/0088.Merge%20Sorted%20Array/README_EN.md)
5858
1. [Find Minimum in Rotated Sorted Array](/solution/0100-0199/0153.Find%20Minimum%20in%20Rotated%20Sorted%20Array/README_EN.md)
5959
1. [Find Minimum in Rotated Sorted Array II](/solution/0100-0199/0154.Find%20Minimum%20in%20Rotated%20Sorted%20Array%20II/README_EN.md)
60+
1. [Product of Array Except Self](/solution/0200-0299/0238.Product%20of%20Array%20Except%20Self/README_EN.md)
6061

6162
### Strings
6263

‎lcof/面试题66. 构建乘积数组/README.md

+26-36
Original file line numberDiff line numberDiff line change
@@ -33,17 +33,16 @@
3333
```python
3434
class Solution:
3535
def constructArr(self, a: List[int]) -> List[int]:
36-
if not a:
37-
return []
38-
dp1 = [1 for i in a]
39-
dp2 = [1 for i in a]
4036
n = len(a)
41-
dp1[0], dp2[n - 1] = a[0], a[n - 1]
42-
for i in range(1, n):
43-
dp1[i] = dp1[i - 1] * a[i]
44-
for i in range(n - 2, -1, -1):
45-
dp2[i] = dp2[i + 1] * a[i]
46-
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)]
37+
output = [1 for _ in a]
38+
left = right = 1
39+
for i in range(n):
40+
output[i] = left
41+
left *= a[i]
42+
for i in range(n - 1, -1, -1):
43+
output[i] *= right
44+
right *= a[i]
45+
return output
4746
```
4847

4948
### **Java**
@@ -53,25 +52,17 @@ class Solution:
5352
```java
5453
class Solution {
5554
public int[] constructArr(int[] a) {
56-
if (a == null || a.length == 0) {
57-
return new int[0];
58-
}
5955
int n = a.length;
60-
int[] dp1 = new int[n];
61-
int[] dp2 = new int[n];
62-
dp1[0] = a[0];
63-
dp2[n - 1] = a[n - 1];
64-
for (int i = 1; i < n; ++i) {
65-
dp1[i] = dp1[i - 1] * a[i];
66-
}
67-
for (int i = n - 2; i >= 0; --i) {
68-
dp2[i] = dp2[i + 1] * a[i];
56+
int[] output = new int[n];
57+
for (int i = 0, left = 1; i < n; ++i) {
58+
output[i] = left;
59+
left *= a[i];
6960
}
70-
int[] res = new int[n];
71-
for (int i = 0; i < n; ++i) {
72-
res[i] = (i - 1 < 0 ? 1 : dp1[i - 1]) * (i + 1 >= n ? 1 : dp2[i + 1]);
61+
for (int i = n - 1, right = 1; i >= 0; --i) {
62+
output[i] *= right;
63+
right *= a[i];
7364
}
74-
return res;
65+
return output;
7566
}
7667
}
7768
```
@@ -84,18 +75,17 @@ class Solution {
8475
* @return {number[]}
8576
*/
8677
var constructArr = function (a) {
87-
let pre = new Array(a.length + 1).fill(1);
88-
pre[0] = 1;
89-
let res = new Array(a.length).fill(1);
90-
for (let i = 1; i <= a.length; i++) {
91-
pre[i] = a[i - 1] * pre[i - 1];
78+
const n = a.length;
79+
let output = new Array(n);
80+
for (let i = 0, left = 1; i < n; ++i) {
81+
output[i] = left;
82+
left *= a[i];
9283
}
93-
let cur = 1;
94-
for (let i = a.length - 1; i >= 0; i--) {
95-
res[i] = pre[i] * cur;
96-
cur *= a[i];
84+
for (let i = n - 1, right = 1; i >= 0; --i) {
85+
output[i] *= right;
86+
right *= a[i];
9787
}
98-
return res;
88+
return output;
9989
};
10090
```
10191

Original file line numberDiff line numberDiff line change
@@ -1,23 +1,15 @@
11
class Solution {
22
public int[] constructArr(int[] a) {
3-
if (a == null || a.length == 0) {
4-
return new int[0];
5-
}
63
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];
4+
int[] output = new int[n];
5+
for (int i = 0, left = 1; i < n; ++i) {
6+
output[i] = left;
7+
left *= a[i];
168
}
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]);
9+
for (int i = n - 1, right = 1; i >= 0; --i) {
10+
output[i] *= right;
11+
right *= a[i];
2012
}
21-
return res;
13+
return output;
2214
}
2315
}

‎lcof/面试题66. 构建乘积数组/Solution.js

+9-10
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,15 @@
33
* @return {number[]}
44
*/
55
var constructArr = function (a) {
6-
let pre = new Array(a.length + 1).fill(1);
7-
pre[0] = 1;
8-
let res = new Array(a.length).fill(1);
9-
for (let i = 1; i <= a.length; i++) {
10-
pre[i] = a[i - 1] * pre[i - 1];
6+
const n = a.length;
7+
let output = new Array(n);
8+
for (let i = 0, left = 1; i < n; ++i) {
9+
output[i] = left;
10+
left *= a[i];
1111
}
12-
let cur = 1;
13-
for (let i = a.length - 1; i >= 0; i--) {
14-
res[i] = pre[i] * cur;
15-
cur *= a[i];
12+
for (let i = n - 1, right = 1; i >= 0; --i) {
13+
output[i] *= right;
14+
right *= a[i];
1615
}
17-
return res;
16+
return output;
1817
};
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
class Solution:
22
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]
73
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)]
4+
output = [1 for _ in a]
5+
left = right = 1
6+
for i in range(n):
7+
output[i] = left
8+
left *= a[i]
9+
for i in range(n - 1, -1, -1):
10+
output[i] *= right
11+
right *= a[i]
12+
return output

‎solution/0200-0299/0238.Product of Array Except Self/README.md

+48-1
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,62 @@
3434
<!-- 这里可写当前语言的特殊实现逻辑 -->
3535

3636
```python
37-
37+
class Solution:
38+
def productExceptSelf(self, nums: List[int]) -> List[int]:
39+
n = len(nums)
40+
output = [1 for _ in nums]
41+
left = right = 1
42+
for i in range(n):
43+
output[i] = left
44+
left *= nums[i]
45+
for i in range(n - 1, -1, -1):
46+
output[i] *= right
47+
right *= nums[i]
48+
return output
3849
```
3950

4051
### **Java**
4152

4253
<!-- 这里可写当前语言的特殊实现逻辑 -->
4354

4455
```java
56+
class Solution {
57+
public int[] productExceptSelf(int[] nums) {
58+
int n = nums.length;
59+
int[] output = new int[n];
60+
for (int i = 0, left = 1; i < n; ++i) {
61+
output[i] = left;
62+
left *= nums[i];
63+
}
64+
for (int i = n - 1, right = 1; i >= 0; --i) {
65+
output[i] *= right;
66+
right *= nums[i];
67+
}
68+
return output;
69+
}
70+
}
71+
```
4572

73+
### **JavaScript**
74+
75+
```js
76+
/**
77+
* @param {number[]} nums
78+
* @return {number[]}
79+
*/
80+
var productExceptSelf = function (nums) {
81+
const n = nums.length;
82+
let output = new Array(n);
83+
for (let i = 0, left = 1; i < n; ++i) {
84+
output[i] = left;
85+
left *= nums[i];
86+
}
87+
for (let i = n - 1, right = 1; i >= 0; --i) {
88+
output[i] *= right;
89+
right *= nums[i];
90+
}
91+
return output;
92+
};
4693
```
4794

4895
### **...**

‎solution/0200-0299/0238.Product of Array Except Self/README_EN.md

+48-1
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,60 @@ Could you solve it with constant space complexity? (The output array <strong>doe
2727
### **Python3**
2828

2929
```python
30-
30+
class Solution:
31+
def productExceptSelf(self, nums: List[int]) -> List[int]:
32+
n = len(nums)
33+
output = [1 for _ in nums]
34+
left = right = 1
35+
for i in range(n):
36+
output[i] = left
37+
left *= nums[i]
38+
for i in range(n - 1, -1, -1):
39+
output[i] *= right
40+
right *= nums[i]
41+
return output
3142
```
3243

3344
### **Java**
3445

3546
```java
47+
class Solution {
48+
public int[] productExceptSelf(int[] nums) {
49+
int n = nums.length;
50+
int[] output = new int[n];
51+
for (int i = 0, left = 1; i < n; ++i) {
52+
output[i] = left;
53+
left *= nums[i];
54+
}
55+
for (int i = n - 1, right = 1; i >= 0; --i) {
56+
output[i] *= right;
57+
right *= nums[i];
58+
}
59+
return output;
60+
}
61+
}
62+
```
3663

64+
### **JavaScript**
65+
66+
```js
67+
/**
68+
* @param {number[]} nums
69+
* @return {number[]}
70+
*/
71+
var productExceptSelf = function (nums) {
72+
const n = nums.length;
73+
let output = new Array(n);
74+
for (let i = 0, left = 1; i < n; ++i) {
75+
output[i] = left;
76+
left *= nums[i];
77+
}
78+
for (let i = n - 1, right = 1; i >= 0; --i) {
79+
output[i] *= right;
80+
right *= nums[i];
81+
}
82+
return output;
83+
};
3784
```
3885

3986
### **...**

‎solution/0200-0299/0238.Product of Array Except Self/Solution.java

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
class Solution {
22
public int[] productExceptSelf(int[] nums) {
3-
int len = nums.length;
4-
int[] output = new int[len];
5-
for (int i = 0, left = 1; i < len; i++) {
3+
int n = nums.length;
4+
int[] output = new int[n];
5+
for (int i = 0, left = 1; i < n; ++i) {
66
output[i] = left;
77
left *= nums[i];
88
}
9-
for (int j = len - 1, right = 1; j >= 0; j--) {
10-
output[j] *= right;
11-
right *= nums[j];
9+
for (int i = n - 1, right = 1; i >= 0; --i) {
10+
output[i] *= right;
11+
right *= nums[i];
1212
}
1313
return output;
1414
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number[]}
4+
*/
5+
var productExceptSelf = function (nums) {
6+
const n = nums.length;
7+
let output = new Array(n);
8+
for (let i = 0, left = 1; i < n; ++i) {
9+
output[i] = left;
10+
left *= nums[i];
11+
}
12+
for (let i = n - 1, right = 1; i >= 0; --i) {
13+
output[i] *= right;
14+
right *= nums[i];
15+
}
16+
return output;
17+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class Solution:
2+
def productExceptSelf(self, nums: List[int]) -> List[int]:
3+
n = len(nums)
4+
output = [1 for _ in nums]
5+
left = right = 1
6+
for i in range(n):
7+
output[i] = left
8+
left *= nums[i]
9+
for i in range(n - 1, -1, -1):
10+
output[i] *= right
11+
right *= nums[i]
12+
return output

0 commit comments

Comments
 (0)
Please sign in to comment.