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

Pythonでk個の数値を削除した後に隣接する値の最大差を見つけるプログラム


numsという数値のリストがあり、それらが昇順で並べ替えられているとすると、隣接する2つの値の最大差ができるだけ小さくなるように、リストからk値を削除して、最終的に差を見つける必要があります。

したがって、入力がnums =[15、20、30、400、1500] k =2の場合、出力は10になります。これは、[400、1500]を削除して20と30の差を取得する場合と同じです。

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

  • abs_diff:=nums内の連続するすべての要素の差分のリスト
  • 関数dp()を定義します。これにはi、j、cntが必要です
  • cntが0と同じ場合、
    • m:=0
    • iからjの範囲のkについては、
      • m:=最大mおよびabs_diff [k]
    • return m
  • dp(i + 1、j、cnt-1)およびdp(i、j-1、cnt-1)の最小値を返します
  • メインの方法から次の手順を実行します。
  • return dp(0、abs_diffのサイズ-1、k)

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

class Solution:
   def solve(self, nums, k):
      abs_diff = [nums[i] - nums[i - 1] for i in range(1, len(nums))]

      def dp(i, j, cnt):
         if cnt == 0:
            m = 0
            for k in range(i, j + 1):
               m = max(m, abs_diff[k])
            return m
         return min(dp(i + 1, j, cnt - 1), dp(i, j - 1, cnt - 1))

      return dp(0, len(abs_diff) - 1, k)
     
ob = Solution()
nums = [15, 20, 30, 400, 1500]
k = 2
print(ob.solve(nums, k))

入力

[15, 20, 30, 400, 1500], 2

出力

10

  1. サブシーケンスの最大合計を見つけるプログラム。2つの値の差はPythonでの位置の差と同じです。

    numsと呼ばれる数値のリストがあるとすると、厳密に増加する値のサブシーケンスを選択します。ここで、2つの数値のそれぞれの違いは、2つのインデックスの違いと同じです。したがって、そのようなサブシーケンスの最大合計を見つける必要があります。 したがって、入力がnums =[6、7、9、9、8、5]の場合、インデックスが[0、1、]であるサブシーケンス[6、7、9]を選択すると、出力は22になります。 3]。連続する各数値の違いは[1、2]であり、これはそれらのインデックスの違いと同じです。 これを解決するには、次の手順に従います- d:=空のマップ インデックスiと値x(nums

  2. 最大3つの数字を見つけるPythonプログラム

    このチュートリアルでは、3つの数字から最大量を見つけるプログラムを作成します。 3つの数字があり、その3つの数字から最大数を見つけることが目標です。 理解を深めるために、いくつかのサンプルテストケースを見てみましょう。 Input: a, b, c = 2, 34, 4 Output: 34 Input: a, b, c = 25, 3, 12 Output: 25 Input: a, b, c = 5, 5, 5 Output: 5 以下の手順に従って、3つの数字の中から最大数を見つけてください。 アルゴリズム 1. Initialise three numbers a, b