File tree Expand file tree Collapse file tree 1 file changed +48
-0
lines changed
product-of-array-except-self Expand file tree Collapse file tree 1 file changed +48
-0
lines changed Original file line number Diff line number Diff line change 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+ } ;
You can’t perform that action at this time.
0 commit comments