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

Pythonのソートされた行列のK番目の最小要素


行と列のそれぞれが昇順で並べ替えられているnxn行列があるとすると、行列内でk番目に小さい要素を見つける必要があります。これは、k番目の一意の要素ではなく、ソートされた順序でk番目に小さい要素であることに注意してください。したがって、入力が[[1,5,9]、[10,11,13]、[12,13,15]]のようである場合、k =8の場合、出力は13になります。

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

  • checkVal()と呼ばれる1つのメソッドを定義し、引数は行列と値です
  • i:=0、j:=行列の長さ[0] – 1、カウンター:=0
  • whilei<行列の長さとj>=0
    • matrix [i、j]>の値の場合、jを1減らし、それ以外の場合、counter:=counter + j + 1、iを1増やします
  • リターンカウンター
  • 主な方法は次のようになります-
  • n:=行列の行、高:=右下隅の要素、低:=左上隅の要素
  • 低い<=高い間、実行
    • 中=低+(高–低)/ 2
    • count:=checkVal(matrix、mid)
    • count
  • 低く戻す

理解を深めるために、次の実装を見てみましょう-

class Solution(object):
   def kthSmallest(self, matrix, k):
      """
      :type matrix: List[List[int]]
      :type k: int
      :rtype: int
      """
      n = len(matrix)
      high = matrix[n-1][n-1]
      low = matrix[0][0]
      while low<=high:
         mid = low + (high - low) /2
         count = self.check_value(matrix,mid)
         if count< k:
            low = mid+1
         else :
            high = mid-1
      return int(low)
   def check_value(self, matrix, value):
      i = 0
      j = len(matrix[0])-1
      counter = 0
      while(i<len(matrix) and j >=0):
         if matrix[i][j] > value:
            j-=1
         else:
            counter+=j+1
            i+=1
      return counter
matrix = [[1,5,9],[10,11,13],[12,13,15]]
ob = Solution()
print(ob.kthSmallest(matrix, 8))

入力

matrix =[[1,5,9],[10,11,13],[12,13,15]]
k = 8

出力

13

  1. PythonのBSTでK番目に小さい要素

    二分探索木があるとします。そのBSTでK番目に小さい要素を見つける必要があります。したがって、ツリーが次のような場合- したがって、3番目に小さい要素を見つけたい場合、k =3であり、結果は7になります。 これを解決するには、次の手順に従います- ノードと呼ばれる空のリストを1つ作成します solve(root、nodes)を呼び出す return k –ノードの1番目の要素 solveメソッドが作成されます。これはルートとノードの配列を取得します。これは次のように機能します- rootがnullの場合は、戻ります solve(ルートの左側、ノード) ルートの値をノード配列に追

  2. ソートされたリストに要素を挿入するPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −リストが与えられたので、ソートされた順序を変更せずにリストに要素を挿入する必要があります 以下で説明するように、2つのアプローチがあります- アプローチ1:強引な方法 例 def insert(list_, n):    # search    for i in range(len(list_)):       if list_[i] > n:          index = i