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

Pythonでペアワイズ隣接和を小さくするプログラム


numsなどの非負の数と非負の値kのリストがあるとします。ここで、numsで1つの正のアンバーを選択し、それを1減らす操作を実行できると仮定します。リスト内の隣接する値のすべてのペアの合計が<=kになるように、必要な操作の最小数を見つける必要があります。答えが非常に大きい場合は、結果mod 10 ^ 9+7を返します。

したがって、入力がnums =[4、6、2、5]、k =6のような場合、リストを[3、3、1、4]にデクリメントできるため、出力は5になります。 5デクリメントの。ここで、隣接するすべてのペアの合計は<=6です。

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

  • m =10 ^ 9 + 7
  • ans:=0
  • 範囲0からnums-1のサイズのiの場合、do
    • sm:=nums [i] + nums [i + 1]
    • diff:=smの最大値-kおよび0
    • nums [i + 1]:=nums [i + 1] --diff
    • nums [i + 1] <0の場合、
      • nums [i + 1]:=0
    • ans:=ans + diff
  • return ans mod m

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

m = 10 ** 9 + 7
class Solution:
   def solve(self, nums, k):
      ans = 0
      for i in range(0, len(nums) - 1):
         sm = nums[i] + nums[i + 1]
         diff = max(sm - k, 0)
         nums[i + 1] -= diff
         if nums[i + 1] < 0:
            nums[i + 1] = 0
         ans += diff
      return ans % m
ob = Solution()
nums = [4, 6, 2, 5]
k = 6 print(ob.solve(nums, k))

入力

[4, 6, 2, 5], 6

出力

5

  1. Pythonでn-aryツリーのコピーを作成するプログラム

    ルートが「ルート」に与えられているn-aryツリーが提供されたとします。完全なn-aryバイナリツリーのコピーを作成し、両方のツリーのプレオーダートラバーサルを実行する必要があります。コピーしたツリーは、別のルートノードを使用して保存する必要があります。ツリーのノード構造を以下に示します- Node:    value : <integer>    children : <array> したがって、入力が次のような場合 、出力はになります [14, 27, 32, 42, 56, 65] 入力ツリーと出力ツリーのプレオ

  2. Pythonでインドの旗を作るプログラム

    グラフを描画するPythonのライブラリには、グラフを提供するだけでなく、フラグなどの他の図を柔軟に描画できる非常に広範な機能があります。その意味で、これらのモジュールには芸術的なタッチがあります。この記事では、ライブラリnumpyとmatplotlibを使用してインドの旗を描く方法を説明します。 アプローチ 同じ幅の長方形を3つ作成し、適切な色と境界線で描画します。 pyplot関数を使用して、中央の長方形の中央にAshokChakraの円を描きます。 numpyとmatplotlibを使用して、AshokChakra内に24本の線を描画します。 上記のすべての図では