File tree 1 file changed +57
-0
lines changed
solution/0200-0299/0238.Product of Array Except Self
1 file changed +57
-0
lines changed Original file line number Diff line number Diff line change 46
46
47
47
<!-- 这里可写通用的实现逻辑 -->
48
48
49
+ ** 暴力:**
50
+
51
+ 正常计算除自身之外的乘积。
52
+
53
+ ``` txt
54
+ PRODUCT_EXCEPT_SELF(A)
55
+ n = A.length
56
+ let r[0..n]be a new array
57
+ for i = 0 in n
58
+ s = 1
59
+ for j = 0 in n
60
+ if j == i
61
+ continue
62
+ s *= A[j]
63
+ r[i] = s
64
+ return r
65
+ ```
66
+
67
+ ** 左右乘积:**
68
+
69
+ 分别从左至右,从右至左累乘一次即可。
70
+
71
+ ``` txt
72
+ PRODUCT_EXCEPT_SELF(A)
73
+ n = A.length
74
+ let r[0..n]be a new array
75
+ p = 1
76
+ q = 1
77
+ for i = 0 in n
78
+ r[i] = p
79
+ p *= A[i]
80
+ for i = n - 1 in 0 downto
81
+ r[i] *= q
82
+ q *= A[i]
83
+ return r
84
+ ```
85
+
86
+ 可行性说明:
87
+
88
+ 以 ` nums = [1, 2, 3, 4] ` 为例。
89
+
90
+ ` r[i] ` 的数值由 ` nums[0..i - 1] ` 的数值乘积所决定。在遍历结束后,最后一个元素得到了最终结果(因为累乘了前方所有数值)。
91
+
92
+ ``` txt
93
+ nums: [1, 2, 3, 4]
94
+ r: [1, 1, 2, 6]
95
+ p: [1, 2, 6, 24]
96
+ ```
97
+
98
+ 而其他位置的数值,距离结果还差什么呢,那就是相对自身,后方所有数值的乘积,于是就有了第二次,从后往前的过程。
99
+
100
+ ``` txt
101
+ nums: [1, 2, 3, 4]
102
+ r: [24, 12, 8, 6]
103
+ p: [24, 24, 12, 4]
104
+ ```
105
+
49
106
<!-- tabs:start -->
50
107
51
108
### ** Python3**
You can’t perform that action at this time.
0 commit comments