Skip to content

Commit dfa7735

Browse files
committed
#238 solution
1 parent 7adadbe commit dfa7735

File tree

1 file changed

+60
-18
lines changed

1 file changed

+60
-18
lines changed

product-of-array-except-self/ys-han00.cpp

Lines changed: 60 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,69 @@
1+
// class Solution {
2+
// public:
3+
// vector<int> productExceptSelf(vector<int>& nums) {
4+
// int mul = 1, zero_cnt = 0;
5+
6+
// for(int i = 0; i < nums.size(); i++) {
7+
// if(nums[i] != 0)
8+
// mul *= nums[i];
9+
// else
10+
// zero_cnt++;
11+
// }
12+
13+
// vector<int> ans = vector<int>(nums.size(), 0);
14+
15+
// if(zero_cnt == 1) {
16+
// for(int i = 0; i < nums.size(); i++) {
17+
// if(nums[i] == 0) {
18+
// ans[i] = mul;
19+
// break;
20+
// }
21+
// }
22+
// } else if(zero_cnt == 0) {
23+
// for(int i = 0; i < nums.size(); i++)
24+
// ans[i] = mul / nums[i];
25+
// }
26+
27+
// return ans;
28+
// }
29+
// };
30+
31+
// class Solution {
32+
// public:
33+
// vector<int> productExceptSelf(vector<int>& nums) {
34+
// int mul = 1, zero_cnt = 0;
35+
// vector<int> prefix(nums.size(), 0), postfix(nums.size(), 0);
36+
37+
// prefix[0] = 1;
38+
// for(int i = 1; i < nums.size(); i++)
39+
// prefix[i] = nums[i - 1] * prefix[i - 1];
40+
41+
// postfix[nums.size() - 1] = 1;
42+
// for(int i = nums.size() - 2; i >= 0; i--)
43+
// postfix[i] = nums[i + 1] * postfix[i + 1];
44+
45+
// vector<int> ans = vector<int>(nums.size(), 0);
46+
// for(int i = 0; i < nums.size(); i++)
47+
// ans[i] = postfix[i] * prefix[i];
48+
49+
// return ans;
50+
// }
51+
// };
52+
153
class Solution {
254
public:
355
vector<int> productExceptSelf(vector<int>& nums) {
4-
int mul = 1, zero_cnt = 0;
56+
vector<int> ans(nums.size(), 1);
57+
int before = 1, after = 1;
558

6-
for(int i = 0; i < nums.size(); i++) {
7-
if(nums[i] != 0)
8-
mul *= nums[i];
9-
else
10-
zero_cnt++;
59+
for(int i = 0; i < nums.size() - 1; i++) {
60+
before *= nums[i];
61+
ans[i + 1] *= before;
1162
}
1263

13-
vector<int> ans = vector<int>(nums.size(), 0);
14-
15-
if(zero_cnt == 1) {
16-
for(int i = 0; i < nums.size(); i++) {
17-
if(nums[i] == 0) {
18-
ans[i] = mul;
19-
break;
20-
}
21-
}
22-
} else if(zero_cnt == 0) {
23-
for(int i = 0; i < nums.size(); i++)
24-
ans[i] = mul / nums[i];
64+
for(int i = nums.size() - 1; i > 0; i--) {
65+
after *= nums[i];
66+
ans[i - 1] *= after;
2567
}
2668

2769
return ans;

0 commit comments

Comments
 (0)