剣指offerシリーズ-面接問題-面接問題66.積配列の構築(python)
6198 ワード
文書ディレクトリ 1. タイトル 2. 解題構想 2.1暴力法 2.2 2回の遍歴 3. コード実装 3.0暴力法 3.1 2回の遍歴 4. まとめ 5. 参考文献 1.テーマ
配列A[0,1,...,n−1]を指定し、配列B[0,1,...,n−1を構築し、Bの要素B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1].除算は使用できません.
2.問題の解き方
2.1暴力法
2.2 2回の遍歴
詳しくは試験問題66.積配列の構築(表パーティション化,明確な図解)暴力法が失敗したのは,多くの計算を繰り返したため,以前に計算した値を必ず利用し,どのように利用したかが鍵となる.
3.コード実装
3.0暴力法
つらいのは時間の制限を超えたことだ.
3.1 2回の遍歴
4.まとめ
紙に絵をたくさん描くべきで、法則が見つかるかもしれません...
5.参考文献
[1]剣指offer叢書[2]剣指Offer-有名企業の面接官が典型的なプログラミング問題を詳しく話す
配列A[0,1,...,n−1]を指定し、配列B[0,1,...,n−1を構築し、Bの要素B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1].除算は使用できません.
2.問題の解き方
2.1暴力法
2.2 2回の遍歴
詳しくは試験問題66.積配列の構築(表パーティション化,明確な図解)暴力法が失敗したのは,多くの計算を繰り返したため,以前に計算した値を必ず利用し,どのように利用したかが鍵となる.
3.コード実装
3.0暴力法
つらいのは時間の制限を超えたことだ.
class Solution:
def constructArr(self, a: List[int]) -> List[int]:
B = []
for i in range(len(a)):
num = 1
for j in range(len(a)):
if i != j:
num *= a[j]
B.append(num)
return B
3.1 2回の遍歴
class Solution:
def constructArr(self, a: List[int]) -> List[int]:
"""
"""
b, temp = [1 for i in range(len(a))], 1
for i in range(1, len(a)):
b[i] = b[i-1] * a[i-1]
for i in range(len(a)-1, -1, -1):
b[i] *= temp
temp *= a[i]
return b
4.まとめ
紙に絵をたくさん描くべきで、法則が見つかるかもしれません...
5.参考文献
[1]剣指offer叢書[2]剣指Offer-有名企業の面接官が典型的なプログラミング問題を詳しく話す