Skip to content

Commit c487499

Browse files
committed
feat: solve array except self
1 parent 4953d89 commit c487499

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number[]}
4+
5+
result[i] = (nums[0] * ... * nums[i-1]) * (nums[i+1] * nums[n-1])
6+
i=0 r[0]= 1
7+
i=1 r[1]= 1 * nums[0] = 1
8+
i=2 r[2]= 1 * nums[0] * nums[1] = 2
9+
i=3 r[3]= 1 * nums[0] * nums[1] * nums[2] = 6
10+
11+
i=0 r[0]=24
12+
i=1 r[1]= 1 * nums[3] * nums[2] = 12
13+
r=2 r[2]= 1 * nums[3] =4
14+
r=3 r[3]= 1
15+
16+
i=0 r[0]=1 * 24
17+
i=1 r[1]=1 * 12
18+
i=2 r[2]=2 * 4
19+
i=3 r[3]=6 * 1
20+
인덱스를 중심으로 왼쪽 구간 원소의 곱 * 오른쪽 구간 원소의 곱
21+
22+
시간복잡도 계산
23+
왼쪽 구간 for문 nums에 비례해서 연산
24+
오른쪽 구간 for문 nums에 비례해서 연산
25+
=> O(n)
26+
27+
공간복잡도 계산
28+
start, end 할당(출력공간인 resultArray배열은 추가공간에서 제외된다.)
29+
=> O(1)
30+
*/
31+
var productExceptSelf = function (nums) {
32+
let resultArray = Array(nums.length).fill(1);
33+
const n = nums.length;
34+
35+
let start = 1;
36+
for (let i = 1; i < n; i++) {
37+
start *= nums[i - 1];
38+
resultArray[i] = start;
39+
}
40+
41+
let end = 1;
42+
for (let i = n - 2; i >= 0; i--) {
43+
end *= nums[i + 1];
44+
resultArray[i] *= end;
45+
}
46+
47+
return resultArray;
48+
};

0 commit comments

Comments
 (0)