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

Pythonでの1つのスワップによる以前の順列


正の整数(必ずしも一意ではない)の配列Aがあるとすると、1回のスワップで作成できるAよりも小さい辞書式順序で最大の順列を見つける必要があります(Aスワップは2つの数値A[i]とA [j])。不可能な場合は、同じ配列を返します。したがって、配列が[3,2,1]のような場合、2と1を交換することにより、出力は[3,1,2]になります

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

  • n:=Aのサイズ
  • 範囲n–2から-1までの左側
    • left =-1の場合は、Aを返します。それ以外の場合は、A [left]> A [left + 1]の場合、中断します
  • 要素:=0、インデックス:=0
  • 右の場合は左+1からn
    • A [right] 要素の場合、
      • 要素=A[右]
      • インデックス:=右
  • A[左]とA[インデックス]を入れ替えます
  • Aを返す

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

class Solution(object):
   def prevPermOpt1(self, A):
      n = len(A)
      for left in range(n-2,-2,-1):
         if left == -1:
            return A
         elif A[left]>A[left+1]:
            break
      element = 0
      index = 0
      for right in range(left+1,n):
         if A[right]<A[left] and A[right]>element:
            element = A[right]
            index = right
      temp = A[left]
      A[left] = A[index]
      A[index] = temp
      return A
ob = Solution()
print(ob.prevPermOpt1([4,2,3,1,3]))

入力

[4,2,3,1,3]

出力

[4, 2, 1, 3, 3]

  1. Python Tkinterで複数のラベルを1行に表示するにはどうすればよいですか?

    Python Tkinterで複数のラベルを1行に表示するには、labelのpack()メソッドを使用して、すべてのラベルを同じ側に揃えます。例を見て、1行に複数のラベルを表示する方法を見てみましょう。 ステップ- 必要なライブラリをインポートし、tkinterフレームのインスタンスを作成します。 ジオメトリを使用してフレームのサイズを設定します メソッド。 ラベルを作成し、「ラベル1」という名前を付けます 。フォントを設定し、背景色でラベルを強調表示します。 次に、 pack()を使用します ラベル付けの方法とsetside=LEFTを使用して、ラベルを画面の左側に配

  2. Python-PyGameで画像を表示する

    Pygameは、ゲームやマルチメディアアプリケーションを作成するためのPython用のマルチメディアライブラリです。この記事では、pygameモジュールを使用して、pygameウィンドウでの高さ、幅、位置を考慮して、画面に画像をペイントする方法を説明します。 以下のプログラムでは、pygameモジュールを初期化してから、画像のモードとキャプションを定義します。次に、画像をロードして座標を定義します。 screen.blit関数は、whileループがゲームの終了をリッスンし続けている間、画面をペイントします。 例 import pygame pygame.init() w = 300; h =