Skip to content

Commit 9e76206

Browse files
committed
feat: relative-sort-array
1 parent 982a460 commit 9e76206

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

sort.relative-sort-array.py

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
from typing import List
2+
3+
4+
class Solution:
5+
"""
6+
1122. 数组的相对排序
7+
https://leetcode-cn.com/problems/relative-sort-array/
8+
给你两个数组,arr1 和 arr2,
9+
- arr2 中的元素各不相同
10+
- arr2 中的每个元素都出现在 arr1 中
11+
对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。
12+
"""
13+
def relativeSortArray(self, arr1: List[int], arr2: List[int]) -> List[int]:
14+
cur = 0
15+
ext = len(arr2)
16+
for i in arr2:
17+
for j in range(len(arr1)):
18+
if i == arr1[j]:
19+
arr1[cur], arr1[j] = arr1[j], arr1[cur]
20+
cur += 1
21+
self.sortRange(arr1, cur, len(arr1) - 1)
22+
return arr1
23+
24+
def sortRange(self, arr, left, right):
25+
if left < right:
26+
p = self.position(arr, left, right)
27+
self.sortRange(arr, left, p - 1)
28+
self.sortRange(arr, p + 1, right)
29+
return arr
30+
31+
def position(self, arr, left ,right):
32+
pivot = left
33+
idx = pivot + 1
34+
for i in range(idx, right + 1):
35+
if arr[i] < arr[pivot]:
36+
arr[i], arr[idx] = arr[idx], arr[i]
37+
idx += 1
38+
39+
arr[pivot], arr[idx - 1] = arr[idx - 1], arr[pivot]
40+
return idx - 1
41+
42+
43+
so = Solution()
44+
# [2,2,2,1,4,3,3,9,6,7,19]
45+
print(so.relativeSortArray([2,3,1,3,2,4,6,19,9,2,7, 12, 10, 7], [2,1,4,3,9,6]))

0 commit comments

Comments
 (0)