[解決済み】数値の配列が与えられたとき、他のすべての数値の積の配列を返す(除算なし)
2022-04-14 17:58:17
質問
面接でこの質問をされたのですが、他の人ならどう解くか知りたいです。私はJavaに最も慣れていますが、他の言語での解答も歓迎します。
<ブロッククオート
数値の配列が与えられる。
nums
の場合、数値の配列を返します。
products
ここで
products[i]
は、すべての
nums[j], j != i
.
Input : [1, 2, 3, 4, 5]
Output: [(2*3*4*5), (1*3*4*5), (1*2*4*5), (1*2*3*5), (1*2*3*4)]
= [120, 60, 40, 30, 24]
で行う必要があります。
O(N)
を除算しないでください。
解き方は?
の説明 ポリジェンルブリカント というメソッドがあります。 配列の構成にコツがあります(4要素の場合)
{ 1, a[0], a[0]*a[1], a[0]*a[1]*a[2], }
{ a[1]*a[2]*a[3], a[2]*a[3], a[3], 1, }
どちらも、左端と右端からそれぞれ開始することで、O(n)で実行できる。
そして、2つの配列を要素ごとに乗算すると、必要な結果が得られます。
私のコードは次のようなものです。
int a[N] // This is the input
int products_below[N];
p=1;
for(int i=0;i<N;++i) {
products_below[i]=p;
p*=a[i];
}
int products_above[N];
p=1;
for(int i=N-1;i>=0;--i) {
products_above[i]=p;
p*=a[i];
}
int products[N]; // This is the result
for(int i=0;i<N;++i) {
products[i]=products_below[i]*products_above[i];
}
もし、空間的にもO(1)である必要があるのなら、このようにすることができます(IMHOではあまり明確ではありません)。
int a[N] // This is the input
int products[N];
// Get the products below the current index
p=1;
for(int i=0;i<N;++i) {
products[i]=p;
p*=a[i];
}
// Get the products above the curent index
p=1;
for(int i=N-1;i>=0;--i) {
products[i]*=p;
p*=a[i];
}
関連
-
[解決済み] 数値の配列の和の求め方
-
[解決済み] JavaScriptの配列で一意な値をすべて取得する(重複を排除する)。
-
[解決済み] 簡単な面接問題が難しくなった:1~100の数字が与えられたとき、ちょうどk個の数字が欠けていることを見つけなさい。
-
[解決済み] 配列のすべてのメンバーを同じ値で初期化するには?
-
[解決済み] Javascriptの配列に、指定された値に等しい属性を持つオブジェクトが含まれているかどうかを判断するにはどうすればよいですか?
-
[解決済み] nからk個の要素の組み合わせをすべて返すアルゴリズム
-
[解決済み] TypeScriptのオブジェクトをC#のようにDictionary型にする
-
[解決済み] 配列の初期化に関するすべての可能な構文
-
[解決済み] インデックスレンジSwiftからの新配列
-
[解決済み] groovyの配列/ハッシュ/コレクション/リストに要素があるかどうかをチェックするには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ArrayIndexOutOfBoundsExceptionが発生しました。7Exception: at Test.m)
-
[解決済み] Bashで文字列の配列をループする?
-
[解決済み] Bashで文字列を配列に分割する方法は?
-
[解決済み】数値の配列が与えられたとき、他のすべての数値の積の配列を返す(除算なし)
-
[解決済み] 配列からランダムに要素を選ぶ
-
[解決済み] Bash配列から要素を削除する
-
[解決済み] インデックスレンジSwiftからの新配列
-
[解決済み] Swift。配列を参照で渡す?
-
[解決済み] groovyの配列/ハッシュ/コレクション/リストに要素があるかどうかをチェックするには?
-
[解決済み] スライスの値を表示する方法