给你两个数组,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]
提示:
arr1.length, arr2.length <= 1000
0 <= arr1[i], arr2[i] <= 1000
arr2
中的元素arr2[i]
各不相同arr2
中的每个元素arr2[i]
都出现在arr1
中
C++
class Solution {
public:
vector<int> relativeSortArray(vector<int>& arr1, vector<int>& arr2)
{
vector<int> res;
map<int,int> tmp;
for(auto it:arr2)
{
tmp[it]=1;
}
vector<int> other;
for(auto it:arr1)
{
if(tmp[it])
{
tmp[it]++;
}
else
{
other.push_back(it);
}
}
sort(other.begin(),other.end());
for(auto it:arr2)
{
int count=tmp[it]-1;
for(int i=0;i<count;i++)
{
res.push_back(it);
}
}
res.insert(res.end(),other.begin(),other.end());
return res;
}
};
python
class Solution:
def relativeSortArray(self, arr1: List[int], arr2: List[int]) -> List[int]:
dic={}
for it in arr2:
dic[it]=1
other=[]
res=[]
for it in arr1:
if it in dic:
dic[it]+=1
else:
other.append(it)
for it in arr2:
count=dic[it]-1
res+=count*[it]
other.sort()
return res+other