|
| 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