Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonのバイナリマトリックスで左端の1が存在する列インデックスを見つけるプログラム?


2Dバイナリ行列があるとします。ここでは、各行が昇順で並べ替えられ、0が1の前に来る場合、値が1の左端の列インデックスを見つける必要があります。そのような結果がない場合は、-1を返します。

したがって、入力が次のような場合

0 0 0 1
0 0 1 1
0 0 1 1
0 0 1 0

2番目の列がマトリックス全体でほとんど1を残しているため、出力は2になります。

これを解決するには、次の手順に従います。

  • 行列が空の場合、

    • -1を返す

  • N:=行列の行数

  • M:=行列の列数

  • i:=0、j:=M-1

  • 左端:=-1

  • i=0の場合、実行

    • matrix [i、j]が0と同じ場合、

      • i:=i + 1

    • それ以外の場合

      • 左端:=j

      • j:=j-1

  • 左端に戻る


class Solution:
   def solve(self, matrix):
      if not matrix or not matrix[0]:
         return -1

      N = len(matrix)
      M = len(matrix[0])

      i = 0
      j = M - 1

      leftmost = -1

      while i < N and j >= 0:
         if matrix[i][j] == 0:
            i += 1
         else:
            leftmost = j
            j -= 1

      return leftmost

ob = Solution()
matrix = [
   [0, 0, 0, 1],
   [0, 0, 1, 1],
   [0, 0, 1, 1],
   [0, 0, 1, 0]
]
print(ob.solve(matrix))

入力

[
[0, 0, 0, 1],
[0, 0, 1, 1],
[0, 0, 1, 1],
[0, 0, 1, 0] ]

出力

2

  1. Pythonの二分木でk長のパスを見つけるプログラム

    一意の値を含む二分木があり、別の値kもあるとすると、ツリー内のkの長さの一意のパスの数を見つける必要があります。パスは、親から子へ、または子から親へのいずれかになります。一部のノードが一方のパスに表示され、もう一方のパスには表示されない場合、2つのパスは異なると見なされます。 したがって、入力が次のような場合 k =3の場合、パスは[12,8,3]、[12,8,10]、[8,12,15]、[3,8,10]であるため、出力は4になります。 これを解決するために、次の手順に従います- 関数dfs()を定義します。これはノードを取ります ノードがnullの場合、 1とk

  2. 行列の転置を見つけるPythonプログラム

    この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 行列が与えられた場合、転置を同じ行列に格納して表示する必要があります。 行列の転置は、行を列に、列を行に変更することで得られます。つまり、A行列の転置はA[i][j]をA[j][i]に変更することで得られます。 以下に示す実装を見てみましょう- 例 N = 4 def transpose(A):    for i in range(N):       for j in range(i+1, N):     &nbs