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

Pythonで1回のスワップで配列を並べ替えることができるかどうかを確認します


整数要素を含む配列が提供されているとします。スワップ操作を1つしか実行できない場合、配列内の値を降順ではない順序で並べ替えることができるかどうかを確認する必要があります。可能であれば、それは可能であると言いますが、そうでない場合は不可能です。

したがって、入力がinput_list =[7、8、12、10、11、9]のようである場合、出力は「実行可能」になります

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

  • temp_list:=リストinput_listのコピー
  • リストtemp_listを並べ替える
  • swap_count:=0
  • 0からinput_listのサイズまでの範囲のiの場合、
    • input_list[i]がtemp_list[i]と同じでない場合、
      • swap_count:=swap_count + 1
  • swap_countが0と同じか、swap_countが2と同じ場合、
    • Trueを返す
  • それ以外の場合、
    • Falseを返す

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

from copy import deepcopy
def solve(input_list):
   temp_list = deepcopy(input_list)
   temp_list.sort()
   swap_count = 0
   for i in range(len(input_list)):
      if input_list[i] != temp_list[i]:
         swap_count += 1
   if swap_count == 0 or swap_count == 2:
      print("Can be done")
   else:
      print("Can't be done")
input_list = [7, 8, 12, 10, 11, 9] 
solve(input_list)

入力

[7, 8, 12, 10, 11, 9]

出力

Can be done

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

    正の整数(必ずしも一意ではない)の配列Aがあるとすると、1回のスワップで作成できるAよりも小さい辞書式順序で最大の順列を見つける必要があります(Aスワップは2つの数値A[i]とA [j])。不可能な場合は、同じ配列を返します。したがって、配列が[3,2,1]のような場合、2と1を交換することにより、出力は[3,1,2]になります これを解決するには、次の手順に従います- n:=Aのサイズ 範囲n–2から-1までの左側 A [left + 1]の場合、中断します 要素:=0、インデックス:=0 右の場合は左+1からn A [right] 要素の場合、 要素=A[右] インデックス

  2. ソートされた配列をPythonでマージ

    2つの並べ替えられた配列AとBがあるとします。それらをマージして、1つの並べ替えられた配列Cのみを形成する必要があります。リストのサイズは異なる場合があります。 たとえば、A=[1,2,4,7]およびB=[1,3,4,5,6,8]とすると、マージされたリストCは[1,1,2,3,4、 4,5,6,7,8] これを解決するには、次の手順に従います- ifine i:=0、j:=0 and end:=length of A – 1 =0であり、A[end]ではありません。 end:=end – 1 whilej