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

Pythonで最も競争力のあるサブシーケンスを見つけるためのプログラム


配列numsと別の値kがあるとすると、サイズkのnumsの最も競合するサブシーケンスを見つける必要があります。ここで、サブシーケンスs1は、サブシーケンスs2(同じサイズ)よりも競争力があります。これは、s1とs2が異なる最初の位置で、サブシーケンスs1の数がs2の対応する数よりも少ない場合です。

したがって、入力がnums =[4,6,3,7] k =2のような場合、サイズ2のすべてのサブシーケンスの中で{[4,6]、[4、 3]、[4,7]、[6,3]、[6,7]、[3,7]}、[3,7]が最も競争力があります。

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

  • 試行:=numsのサイズ-k
  • スタック:=新しいリスト
  • numsの各numについて、実行します
    • スタックが空ではなく、num <スタックの最上位で、> 0を試行している間、実行
      • スタックから要素をポップ
      • 試行:=試行-1
    • numをスタックにプッシュします
  • スタックの上位k個の要素を返す

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

def solve(nums, k):
   attempts = len(nums) - k
   stack = []
   for num in nums:
      while stack and num < stack[-1] and attempts > 0:
         stack.pop()
         attempts -= 1
      stack.append(num)

   return stack[:k]

nums = [4,6,3,7]
k = 2
print(solve(nums, k))

入力

[4,6,3,7], 2

出力

[3,7]

  1. 行列の転置を見つけるPythonプログラム

    この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 行列が与えられた場合、転置を同じ行列に格納して表示する必要があります。 行列の転置は、行を列に、列を行に変更することで得られます。つまり、A行列の転置はA[i][j]をA[j][i]に変更することで得られます。 以下に示す実装を見てみましょう- 例 N = 4 def transpose(A):    for i in range(N):       for j in range(i+1, N):     &nbs

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

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