Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python의 상대 정렬 배열

<시간/>

두 개의 배열 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라는 하나의 맵을 만들고 arr1에 있는 요소의 빈도를 저장합니다.
  • 두 배열 res 및 temp 정의
  • arr2의 각 요소 i에 대해 −
    • 0 ~ D[i] – 1 범위의 j에 대해
      • 해상도에 i 추가
    • 디[i] :=0
  • D
      의 (키, 값) 쌍
    • 값이 0이 아니면
      • for i :=0에서 값 – 1
        • 임시 키 추가
  • 임시 배열을 정렬하고 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]