难度简单
给你两个数组,arr1
和 arr2
,
arr2
中的元素各不相同arr2
中的每个元素都出现在arr1
中
对 arr1
中的元素进行排序,使 arr1
中项的相对顺序和 arr2
中的相对顺序相同。未在 arr2
中出现过的元素需要按照升序放在 arr1
的末尾。
思路:
先遍历数组 arr1,利用 map 统计各数字的数量,根据数组 arr2 的顺序将响应数字的数量重建 arr2与arr1 重叠部分数组。
对数组 arr1 排序,根据排序顺序以及未参与重建数组的数字,补全后续的数组重建。
vector<int> relativeSortArray(vector<int>& arr1, vector<int>& arr2) {
vector<int> res;
int len=arr2.size(),cur=0;
if(!len) return res;
sort(arr1.begin(),arr1.end());
unordered_map<int,int> M;
for(int i:arr1){
M[i];
M[i]++;
}
for(int i:arr2){
while(M[i]--) res.push_back(i);
M[i]=0;
}
for(int i:arr1){
if(M[i]-->0) res.push_back(i);
}
return res;
}