Python中的相对排序数组


假设我们有两个数组arr1和arr2,arr2的元素是唯一的,并且arr2中的所有元素也存在于arr1中。我们必须对arr1的元素进行排序,以便arr1中项目的相对顺序与arr2中的相同。如果有一些元素不存在于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的映射,并存储arr1中存在的元素的频率。
  • 定义两个数组res和temp。
  • 对于arr2中的每个元素i:
    • 对于j从0到D[i]-1
      • 将i添加到res中。
    • D[i] := 0
  • 对于D中的(键,值)对:
    • 如果值不为0,则:
      • 对于i := 0到value – 1
        • 将键添加到temp中。
  • 对temp数组进行排序,将temp添加到res的末尾,并返回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]


更新于:2020年5月18日

607 次浏览

启动您的职业生涯

完成课程后获得认证

开始
广告