[解決済み] 行または列に 0 が含まれる場合、行列のすべてのセルに 0 を設定します。
2022-04-28 04:53:16
質問
0と1を持つNxN行列が与えられる。を含むすべての行を設定します。
0
をすべて
0
を含むすべてのカラムを設定し
0
をすべて
0
s.
例えば
1 0 1 1 0
0 1 1 1 0
1 1 1 1 1
1 0 1 1 1
1 1 1 1 1
の結果
0 0 0 0 0
0 0 0 0 0
0 0 1 1 0
0 0 0 0 0
0 0 1 1 0
マイクロソフトのエンジニアから、余分なメモリを使わず、2つのブーリアン変数と1つのパスだけで解決する方法があると聞いたので、その答えを探しています。
ちなみに、ビット行列なので、行列に入れることができるのは1と0だけだと想像してください。
どのように解決するのですか?
私は午前3時なので疲れていますが、私はインプレースで行列の各数値にちょうど2パスで最初のトライを持っているので、O(NxN)で、それは行列のサイズに線形である。
1列目と1行目を目印にして、1しかない行や列がどこにあるのか分かるようにしています。そして、1行目/1列目がすべて1であるかどうかを記憶するために、2つの変数lとcがあります。 つまり、最初のパスではマーカーを設定し、残りを0にリセットします。
2回目のパスでは、行と列が1であるとマークされた場所に1をセットし、lとcに応じて1行目/列をリセットします。
最初のマス目が最後のマス目に依存するので、1パスでできるのかどうか、強く疑問です。2パス目はもっと効率的にできるかもしれませんが...。
import pprint
m = [[1, 0, 1, 1, 0],
[0, 1, 1, 1, 0],
[1, 1, 1, 1, 1],
[1, 0, 1, 1, 1],
[1, 1, 1, 1, 1]]
N = len(m)
### pass 1
# 1 rst line/column
c = 1
for i in range(N):
c &= m[i][0]
l = 1
for i in range(1,N):
l &= m[0][i]
# other line/cols
# use line1, col1 to keep only those with 1
for i in range(1,N):
for j in range(1,N):
if m[i][j] == 0:
m[0][j] = 0
m[i][0] = 0
else:
m[i][j] = 0
### pass 2
# if line1 and col1 are ones: it is 1
for i in range(1,N):
for j in range(1,N):
if m[i][0] & m[0][j]:
m[i][j] = 1
# 1rst row and col: reset if 0
if l == 0:
for i in range(N):
m [i][0] = 0
if c == 0:
for j in range(1,N):
m [0][j] = 0
pprint.pprint(m)
関連
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] 整数の平方根が整数であるかどうかを判断する最速の方法
-
[解決済み] 簡単な面接問題が難しくなった:1~100の数字が与えられたとき、ちょうどk個の数字が欠けていることを見つけなさい。
-
[解決済み] ビッグ・オー、どうやって計算・概算するんだ?
-
[解決済み] ヒープの構築はどうして時間計算量O(n)になるのですか?
-
[解決済み】画像を使った迷路の表現と解き方
-
[解決済み] ディズニーのファストパスは有効か、有用か 待ち行列論
-
[解決済み】固定長 6 int 配列の最速ソート
-
[解決済み] 良いハッシュ関数とは?
-
[解決済み] 緯度・経度・kmの簡単な計算方法は?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 2つの緯度経度点間の距離を計算する?(ハバーシンの公式)
-
[解決済み] テールコール最適化とは何ですか?
-
[解決済み] 32ビット整数のセットビットの数を数えるには?
-
[解決済み] 地図上のA地点からB地点への道順を計算するアルゴリズムは?
-
[解決済み] Googleの "Did you mean? "はどうなっているのか?アルゴリズムの仕組みとは?[クローズド]
-
[解決済み] 円形のデータの集合の平均はどのように計算するのですか?[クローズド]
-
[解決済み] 並列ソートアルゴリズムの中で、最も平均的な場合分け性能を持つのはどれか?
-
[解決済み] 3つのスタックを持つ待ち行列を実装するには?
-
[解決済み] バックトラックと深さ優先探索の違いは何ですか?
-
[解決済み] 短い文字列のための効率的な圧縮アルゴリズム[closed]。