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

Pythonの別のボックス内に収めることができるボックスの最大数を見つけるためのプログラム


各行が特定のボックスの高さと幅を表すボックスのリストがあるとします。最初のボックスが2番目のボックスよりも小さい場合(幅と高さの両方が他のボックスよりも小さい場合)、ボックスを別のボックスに入れることができます。ボックスに収めることができるボックスの最大数を見つける必要があります。

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


高さ
12
12
10
10
6
6
5
10

[12、12]ボックスに入れることができる[10、10]の中にボックス[6、6]を収めることができるので、出力は3になります。

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

  • 関数insert_index()を定義します。これには時間がかかります、this_h
  • l:=0
  • r:=arrのサイズ-1
  • res:=0
  • l <=rの場合、do
    • m:=l +(r --l)// 2
    • cur_h:=arr [m]
    • cur_h
    • res:=m
    • l:=m + 1
  • それ以外の場合、
    • r:=m-1
  • return res + 1
  • メインの方法から、次の手順を実行します。
  • 幅に基づいてマトリックスを並べ替えます。幅が同じ場合は、高さに基づいて並べ替えます
  • n:=マトリックス内のアイテムの数
  • heights:=サイズのリスト(n + 1)とinfで埋める
  • heights [0]:=-inf
  • res:=0
  • マトリックス内の各ボックスについて、
    • [cur_w、cur_h]:=ボックス
    • index:=insert_index(heights、cur_h)
    • heights [index]> =cur_hの場合、
      • heights [index]:=cur_h
    • res:=resとインデックスの最大値
  • return res
  • 理解を深めるために、次の実装を見てみましょう-

    class Solution:
       def solve(self, matrix):
          matrix = sorted(matrix, key=lambda x: (x[0], -x[1]))
          n = len(matrix)
    
          heights = [float("inf")] * (n + 1)
          heights[0] = float("-inf")
          res = 0
    
          for box in matrix:
             cur_w, cur_h = box
             index = self.insert_index(heights, cur_h)
    
             if heights[index] >= cur_h:
                heights[index] = cur_h
             res = max(res, index)
          return res
    
       def insert_index(self, arr, this_h):
          l = 0
          r = len(arr) - 1
          res = 0
          while l <= r:
             m = l + (r - l) // 2
             cur_h = arr[m]
             if cur_h < this_h:
                res = m
                l = m + 1
             else:
                r = m - 1
          return res + 1
    
    ob = Solution()
    matrix = [
       [12, 12],
       [10, 10],
       [6, 6],
       [5, 10]
    ]
    print(ob.solve(matrix))

    入力

    matrix = [  
    [12, 12],  
    [10, 10],  
    [6, 6],  
    [5, 10] ]

    出力

    3

    1. Pythonで収集できるコインの最大数を見つけるためのプログラム

      各セルにいくつかのコインが格納されている2Dマトリックスがあるとします。 [0,0]から始めて、右または下にしか移動できない場合、右下隅で収集できるコインの最大数を見つける必要があります。 したがって、入力が次のような場合 1 4 2 2 0 0 0 5 [1、4、2、2、5] のパスをたどると、出力は14になります。 これを解決するために、次の手順に従います- 範囲1からAの行数までのrについては、次のようにします A [r、0]:=A [r、0] + A [r-1、0] 範囲1からAの列数までのcにつ

    2. Pythonプログラムは最大3つ。

      3つの数abとcが与えられた場合、私たちのタスクは、与えられた数の中から最大の要素を見つけなければならないということです。 例 Input: a = 2, b = 4, c = 3 Output: 4 アルゴリズム Step 1: input three user input number. Step2: Add three numbers to list. Step 3: Using max() function to find the greatest number max(lst). Step 4: And finally we will print maximum numbe