Skip to content

Commit e225852

Browse files
committed
Product Of Array Except Self Solutions
1 parent 8759c3e commit e225852

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number[]}
4+
*/
5+
6+
/**
7+
* Runtime: 124ms, Memory: 65.06MB
8+
* Time complexity: O(n^2)
9+
* Space complexity: O(n)
10+
* -> answer 배열에 O(n)
11+
* -> splicedArr 배열에 O(n)
12+
*/
13+
14+
var productExceptSelf = function (nums) {
15+
const totalProduct = nums.reduce((total, current) => total * current, 1);
16+
const answer = Array(nums.length).fill(0);
17+
18+
for (let i = 0; i < nums.length; i++) {
19+
answer[i] = totalProduct / nums[i];
20+
if (nums[i] === 0) {
21+
const splicedArr = nums.filter(function (_, index) {
22+
return index !== i;
23+
});
24+
answer[i] = splicedArr.reduce((total, current) => total * current, 1);
25+
}
26+
}
27+
28+
return answer;
29+
};
30+
31+
/**
32+
* @param {number[]} nums
33+
* @return {number[]}
34+
*/
35+
36+
/**
37+
* 위의 풀이는 0일 때마다 순회를 해야 하기 때문에 해당 부분을 0의 개수를 세어 처리하도록 변경한 풀이
38+
39+
* Runtime: 109ms, Memory: 63.45MB
40+
* Time complexity: O(n)
41+
* Space complexity: O(n)
42+
43+
*/
44+
var productExceptSelf = function (nums) {
45+
let totalProduct = 1;
46+
let zeroCount = 0;
47+
const answer = Array(nums.length).fill(0);
48+
49+
for (let numIndex = 0; numIndex < nums.length; numIndex++) {
50+
if (nums[numIndex] === 0) {
51+
zeroCount += 1;
52+
} else {
53+
totalProduct *= nums[numIndex];
54+
}
55+
}
56+
57+
for (let i = 0; i < nums.length; i++) {
58+
if (nums[i] === 0) {
59+
if (zeroCount - 1 > 0) {
60+
answer[i] = 0;
61+
} else {
62+
answer[i] = totalProduct;
63+
}
64+
} else {
65+
if (zeroCount > 0) {
66+
answer[i] = 0;
67+
} else {
68+
answer[i] = totalProduct / nums[i];
69+
}
70+
}
71+
}
72+
73+
return answer;
74+
};

0 commit comments

Comments
 (0)