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

Pythonで反転反転を見つけるプログラム


数値と数値のリストが提供されているとします。 a nums [d]となるように、既存の4つ組(a、b、c、d)の数を見つける必要があります。

配列numsは、整数1 ... N

の順列です。

したがって、入力がnums =[3、4、7、6、5]の場合、出力は5になります。

与えられた入力から、これらの反転反転があります-

  • 3、4、7、6

  • 3、4、6、5

  • 3、4、7、5

  • 3、7、6、5

  • 4、7、6、5

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

  • m:=10 ^ 9 + 7

  • numsのサイズが4未満の場合、

    • 0を返す

  • n:=numsのサイズ

  • sorted_ds:=新しいリスト

  • numsの最後の項目をsorted_dsに挿入します

  • リストを並べ替えますsorted_ds

  • ds_smaller_than_c:=[0] * n

  • n − 2〜-1の範囲のcの場合、1ずつ減少します。

    • ds_smaller_than_c [c]:=sorted_dsの右端の位置を返します。nums[c]− 1を挿入して、並べ替えた順序を維持できます

    • sort_dsの最後にnums[c]を挿入します

    • リストを並べ替えますsorted_ds

  • quadruplet_count:=0

  • sort_as:=新しいリスト

  • 数値の最初の数をsorted_as

    に挿入します
  • リストを並べ替えますsorted_as

  • as_smaller_than_b_sum:=0

  • 1からn− 2の範囲のbの場合、実行

    • as_smaller_than_b_sum:=as_smaller_than_b_sum+右端の位置insorted_asここでnums[b]– 1を挿入し、ソートされた順序を維持できます

    • リストを並べ替えますsorted_as

    • as_smaller_than_b_sum:=as_smaller_than_b_sum mod m

    • sort_as

      の最後にnums[b]を挿入します
    • リストを並べ替えますsorted_as

    • quadruplet_count:=quadruplet_count + as_smaller_than_b_sum * ds_smaller_than_c [b + 1]

    • quadruplet_count:=quadruplet_count mod m

  • quadruplet_countを返す

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

import bisect
MOD = 10 ** 9 + 7
class Solution:
   def solve(self, nums):
      if len(nums) < 4:
         return 0
      n = len(nums)
      sorted_ds = list([nums[−1]])
      sorted_ds.sort()
      ds_smaller_than_c = [0] * n
      for c in range(n − 2, −1, −1):
         ds_smaller_than_c[c] = bisect.bisect_right(sorted_ds, nums[c] − 1)
         sorted_ds.append(nums[c])
         sorted_ds.sort()
      quadruplet_count = 0
      sorted_as = list([nums[0]])
      sorted_as.sort()
      as_smaller_than_b_sum = 0
      for b in range(1, n − 2):
         as_smaller_than_b_sum += bisect.bisect_right(sorted_as, nums[b] − 1)
         sorted_as.sort()
         as_smaller_than_b_sum %= MOD
         sorted_as.append(nums[b])
         sorted_as.sort()
         quadruplet_count += as_smaller_than_b_sum * ds_smaller_than_c[b + 1]
         quadruplet_count %= MOD
      return quadruplet_count
ob = Solution()
print(ob.solve([3, 4, 7, 6, 5]))

入力

[3, 4, 7, 6, 5]

出力

5

  1. 配列の合計を見つけるPythonプログラム

    この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 入力として配列が与えられた場合、与えられた配列の合計を計算する必要があります。 ここでは、ブルートフォースアプローチに従うことができます。つまり、リストをトラバースし、各要素を空の合計変数に追加します。最後に、合計の値を表示します。 以下で説明するように、組み込みの合計関数を使用して別のアプローチを実行することもできます。 例 # main arr = [1,2,3,4,5] ans = sum(arr,n) print ('Sum of the array is '

  2. Pythonプログラムで円柱の周囲を見つける

    この記事では、以下に示す問題ステートメントの解決策について学習します- 問題の説明 直径と高さを入力し、円柱の周囲長を見つけます。 周囲長は、円柱、つまり長方形の側面図に他なりません。 したがって、周囲長=2 *(h + d) ここで、dは円柱の直径です hは円柱の高さです それでは、実装を見てみましょう 例 # Function to calculate the perimeter of a cylinder def perimeter( diameter, height ) :    return 2 * ( diameter + height )