33
33
``` python
34
34
class Solution :
35
35
def constructArr (self , a : List[int ]) -> List[int ]:
36
- if not a:
37
- return []
38
- dp1 = [1 for i in a]
39
- dp2 = [1 for i in a]
40
36
n = len (a)
41
- dp1[0 ], dp2[n - 1 ] = a[0 ], a[n - 1 ]
42
- for i in range (1 , n):
43
- dp1[i] = dp1[i - 1 ] * a[i]
44
- for i in range (n - 2 , - 1 , - 1 ):
45
- dp2[i] = dp2[i + 1 ] * a[i]
46
- return [(1 if i - 1 < 0 else dp1[i - 1 ]) * (1 if i + 1 >= n else dp2[i + 1 ]) for i in range (0 , n)]
37
+ output = [1 for _ in a]
38
+ left = right = 1
39
+ for i in range (n):
40
+ output[i] = left
41
+ left *= a[i]
42
+ for i in range (n - 1 , - 1 , - 1 ):
43
+ output[i] *= right
44
+ right *= a[i]
45
+ return output
47
46
```
48
47
49
48
### ** Java**
@@ -53,25 +52,17 @@ class Solution:
53
52
``` java
54
53
class Solution {
55
54
public int [] constructArr (int [] a ) {
56
- if (a == null || a. length == 0 ) {
57
- return new int [0 ];
58
- }
59
55
int n = a. length;
60
- int [] dp1 = new int [n];
61
- int [] dp2 = new int [n];
62
- dp1[0 ] = a[0 ];
63
- dp2[n - 1 ] = a[n - 1 ];
64
- for (int i = 1 ; i < n; ++ i) {
65
- dp1[i] = dp1[i - 1 ] * a[i];
66
- }
67
- for (int i = n - 2 ; i >= 0 ; -- i) {
68
- dp2[i] = dp2[i + 1 ] * a[i];
56
+ int [] output = new int [n];
57
+ for (int i = 0 , left = 1 ; i < n; ++ i) {
58
+ output[i] = left;
59
+ left *= a[i];
69
60
}
70
- int [] res = new int [n];
71
- for ( int i = 0 ; i < n; ++ i) {
72
- res[i] = (i - 1 < 0 ? 1 : dp1[i - 1 ]) * (i + 1 >= n ? 1 : dp2[i + 1 ]) ;
61
+ for ( int i = n - 1 , right = 1 ; i >= 0 ; -- i) {
62
+ output[i] *= right;
63
+ right *= a[i] ;
73
64
}
74
- return res ;
65
+ return output ;
75
66
}
76
67
}
77
68
```
@@ -84,18 +75,17 @@ class Solution {
84
75
* @return {number[]}
85
76
*/
86
77
var constructArr = function (a ) {
87
- let pre = new Array ( a .length + 1 ). fill ( 1 ) ;
88
- pre[ 0 ] = 1 ;
89
- let res = new Array ( a . length ). fill ( 1 );
90
- for ( let i = 1 ; i <= a . length ; i ++ ) {
91
- pre[i] = a[i - 1 ] * pre[i - 1 ];
78
+ const n = a .length ;
79
+ let output = new Array (n) ;
80
+ for ( let i = 0 , left = 1 ; i < n; ++ i) {
81
+ output[i] = left;
82
+ left * = a[i];
92
83
}
93
- let cur = 1 ;
94
- for (let i = a .length - 1 ; i >= 0 ; i-- ) {
95
- res[i] = pre[i] * cur;
96
- cur *= a[i];
84
+ for (let i = n - 1 , right = 1 ; i >= 0 ; -- i) {
85
+ output[i] *= right;
86
+ right *= a[i];
97
87
}
98
- return res ;
88
+ return output ;
99
89
};
100
90
```
101
91
0 commit comments