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

Pythonの相対ソート配列


2つの配列arr1とarr2があり、arr2の要素が一意であり、arr2のすべての要素がarr1にも存在するとします。 arr1のアイテムの相対的な順序がarr2と同じになるように、arr1の要素を並べ替える必要があります。 arr2に存在しない要素がある場合は、それらをarr1の最後に昇順で配置する必要があります。したがって、arr1が[2,3,1,3,2,4,6,7,9,2,19]のようであり、arr2が[2,1,4,3,9,6]のようである場合、結果は[2,2,2,1,4,3,3,9,6,7,19]

になります

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

  • Dという1つのマップを作成し、arr1に存在する要素の頻度を保存します
  • 2つの配列resとtempを定義します
  • arr2の各要素iについて-
    • 0からD[i]–1の範囲のjの場合
      • 解像度にiを追加
    • D [i]:=0
  • Dの(キー、値)ペアの場合
    • 値が0でない場合、
      • for i:=0から値– 1
        • キーを一時に追加
  • temp配列を並べ替え、resの最後にtempを追加し、resを返します

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

class Solution(object):
   def relativeSortArray(self, arr1, arr2):
      d = {}
      for i in arr1:
         if i not in d:
            d[i]= 1
         else:
            d[i]+=1
      res = []
      temp = []
      for i in arr2:
         for j in range(d[i]):
            res.append(i)
         d[i] =0
      for k,v in d.items():
         if v:
            for i in range(v):
               temp.append(k)
      temp.sort()
      res.extend(temp)
      return res
ob1 = Solution()
print(ob1.relativeSortArray([2,3,1,4,2,4,6,7,9,2,19] ,[2,1,4,3,9,6]))

入力

[2,3,1,3,2,4,6,7,9,2,19]
[2,1,4,3,9,6]

出力

[2, 2, 2, 1, 4, 4, 3, 9, 6, 7, 19]



  1. Pythonプログラムでの挿入ソート

    この記事では、Python3.xでの挿入ソートの実装について学習します。またはそれ以前。 アルゴリズム ソートされた配列を各反復で拡張することにより、入力要素を反復します。 現在の要素を、並べ替えられた配列で使用可能な最大値と比較します。 現在の要素の方が大きい場合は、その要素をそのままにして次の要素に移動します。それ以外の場合は、並べ替えられた配列内で正しい位置を見つけて、配列内のその位置に移動します。 これは、並べ替えられた配列内の現在の要素よりも大きいすべての要素を右にシフトすることで実現されます。 それでは、アルゴリズムの視覚的表現を見てみましょう

  2. 挿入ソート用のPythonプログラム

    この記事では、Python3.xでの挿入ソートの実装について学習します。またはそれ以前。 アルゴリズム 1. Iterate over the input elements by growing the sorted array at each iteration. 2. Compare the current element with the largest value available in the sorted array. 3. If the current element is greater, then it leaves the element in its place &n