首先想到的是用兩個列表將arr1中和arr2中共有的元素遍歷出來,其餘非共有的元素分別生成兩個新列表
同時,創造乙個新函式:
將共有元素列表x按照新函式(arr2的順序)進行排列
同時從小到大排列非共有元素的集合a
輸出兩個列表相加
class
solution
:def
relativesortarray
(self, arr1: list[
int]
, arr2: list[
int])-
> list[
int]
: a =
x =for i in arr1:
if i not
in arr2:
else
: x.sort(key=
lambda x: arr2.index(x)
) a.sort(
)return x + a
同時通過借鑑題解發現可以使用計數排序解決本題
先設定乙個計數陣列a,位數為arr1中最大值加一位
遍歷arr1,記錄其中數字出現的次數
遍歷陣列arr2,以arr2中的元素依次按順序找出,並將該數字以該數字在arr1中的頻次追加到result陣列中
同時將a中num的頻次更新為0,便於分離出arr1和arr2中非共有的元素
最後將a中每一位次數仍然不是0的數字取出按次數取出
(由於計數陣列a已經是按照從小到大排序的,所以在這裡無需排序)
返回結果陣列result就大功告成了
class
solution
:def
relativesortarray
(self, arr1: list[
int]
, arr2: list[
int])-
> list[
int]
: count =
max(arr1)
a =[0
]*(count +1)
result =
for num in arr1:
a[num]+=1
for num in arr2:
result.extend(
[num]
* a[num]
) a[num]=0
for i in
range(1
,count+1)
:if a[i]
: result.extend(
[i]* a[i]
)return result
LeetCode 1122 陣列的相對排序
給你兩個陣列,arr1 和 arr2,arr2 中的元素各不相同 arr2 中的每個元素都出現在 arr1 中 對 arr1 中的元素進行排序,使 arr1 中項的相對順序和 arr2 中的相對順序相同。未在 arr2 現過的元素需要按照公升序放在 arr1 的末尾。示例 輸入 arr1 2,3,1...
LeetCode1122 陣列的相對排序
給你兩個陣列,arr1 和 arr2,arr2 中的元素各不相同 arr2 中的每個元素都出現在 arr1 中 對 arr1 中的元素進行排序,使 arr1 中項的相對順序和 arr2 中的相對順序相同。未在 arr2 現過的元素需要按照公升序放在 arr1 的末尾。示例 輸入 arr1 2,3,1...
leetCode 1122 陣列的相對排序
給你兩個陣列,arr1和arr2,arr2中的元素各不相同 arr2中的每個元素都出現在arr1中 對arr1中的元素進行排序,使arr1中項的相對順序和arr2中的相對順序相同。未在arr2 現過的元素需要按照公升序放在arr1的末尾。示例 輸入 arr1 2,3,1,3,2,4,6,7,9,2,...