Skip to content

Commit e1d144d

Browse files
committed
add: solve #239 Product of Array Except Self with ts
1 parent e8d4b4a commit e1d144d

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed
+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/**
2+
* 주어진 배열에서 자신의 인덱스를 제외한 나머지 요소들의 곱을 계산하는 함수
3+
*
4+
* @param {number[]} nums - 정수 배열
5+
* @returns {number[]} - 각 인덱스의 요소를 제외한 나머지 요소들의 곱을 구한 배열
6+
*
7+
* 1. 결과 배열 `result`를 1로 초기화.
8+
* 2. 왼쪽에서 오른쪽으로 순회하며 `left` 값을 이용해 기준 idx 이전의 값을 계산하여 `result`에 저장.
9+
* 3. 오른쪽에서 왼쪽으로 순회하며 `right` 값을 이용해 접미 기준 idx 이후의 값들을 계산 히야 `result`에 곱함.
10+
* 4. 결과 배열 `result`를 반환.
11+
*
12+
* 시간 복잡도:
13+
* - 왼쪽에서 오른쪽 순회: O(n)
14+
* - 오른쪽에서 왼쪽 순회: O(n)
15+
* - 전체 시간 복잡도: O(n)
16+
*
17+
* 공간 복잡도:
18+
* - 추가 배열 없이 상수 공간 사용 (result는 문제의 요구 조건에 포함되지 않음).
19+
* - 전체 공간 복잡도: O(1)
20+
*/
21+
function productExceptSelf(nums: number[]): number[] {
22+
const numLength = nums.length;
23+
const result = new Array(numLength).fill(1);
24+
25+
let left = 1;
26+
for (let i = 0; i < numLength; i++) {
27+
result[i] *= left;
28+
left *= nums[i];
29+
}
30+
31+
let right = 1;
32+
for (let i = numLength; i >= 0; i--) {
33+
result[i] *= right;
34+
right *= nums[i];
35+
}
36+
37+
return result;
38+
}

0 commit comments

Comments
 (0)