leetcode 1122 陣列的相對排序

2021-10-25 09:46:21 字數 1389 閱讀 7801

首先想到的是用兩個列表將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,...