LeetCode 1122 陣列的相對排序

2021-09-25 16:13:35 字數 1109 閱讀 4093

給你兩個陣列,arr1 和 arr2,

arr2 中的元素各不相同

arr2 中的每個元素都出現在 arr1 中

對 arr1 中的元素進行排序,使 arr1 中項的相對順序和 arr2 中的相對順序相同。未在 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]

**實現

c++:我們首先定義乙個長度是1001的陣列tmp,初始化為全0;

為了不改變原陣列的大小,我們建立乙個新的陣列res來作為最終要返回的陣列。其實題目也是這樣要求的。所以直接對arr1進行修改是不合適的,雖然那樣做可以使演算法快一點。

同樣,先遍歷arr1,統計每個元素出現的大小,存放到tmp中。

然後遍歷第二個陣列arr2,對於每乙個元素:如果tmp[arr2[i]]不為0,就追加arr2[i]到res中,同時tmp[arr2[i]]減一;如此迴圈,直到tmp[arr2[i]]為0。

這樣我們就將實現了"arr1 中元素的相對順序和 arr2 中元素的相對順序相同"。

所以對於每乙個tmp[i]:如果不為0,追加i到res中,同時tmp[i]減一;如此迴圈,直到tmp[i]為0。

具體**如下:

class solution 

}for(int i=0; i<1001; i++)

}return result;

}};

python:

class solution(object):

def relativesortarray(self, arr1, arr2):

""":type arr1: list[int]

:type arr2: list[int]

:rtype: list[int]

"""return sorted(arr1, key=lambda x: arr2.index(x) if x in arr2 else 1001+x)

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

leetcode 1122 陣列的相對排序

首先想到的是用兩個列表將arr1中和arr2中共有的元素遍歷出來,其餘非共有的元素分別生成兩個新列表 同時,創造乙個新函式 將共有元素列表x按照新函式 arr2的順序 進行排列 同時從小到大排列非共有元素的集合a 輸出兩個列表相加 class solution def relativesortarr...