难度简单
给你两个数组,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;
}
这篇博客主要介绍了如何解决数组的相对排序问题。通过使用哈希映射统计数组arr1中各元素出现的次数,然后根据数组arr2的顺序重建部分数组,并对未在arr2中出现的元素进行升序排序,最终完成整个数组的相对排序。提供的C++代码示例展示了具体的实现过程。
8万+

被折叠的 条评论
为什么被折叠?



