给你两个数组,arr1
和 arr2
,arr2
中的元素各不相同,arr2
中的每个元素都出现在 arr1
中。
对 arr1
中的元素进行排序,使 arr1
中项的相对顺序和 arr2
中的相对顺序相同。未在 arr2
中出现过的元素需要按照升序放在 arr1
的末尾。
class Solution {
public:
std::vector<int> relativeSortArray(std::vector<int>& arr1, std::vector<int>& arr2) {
vector<int> ans;
unordered_map<int, int> mp;
// 统计 arr1 中每个数字出现的次数
for (auto &num : arr1) {
mp[num]++;
}
// 按照 arr2 的顺序将元素加入结果集
for (auto &num : arr2) {
//insert 在 pos插入 n 个 elem
ans.insert(ans.end(), mp[num], num);
mp[num] = 0; // 清零,表示这些元素已经处理过了
}
// 收集不在 arr2 中的元素
vector<int> remaining;
for (auto &num : arr1) {
if (mp[num] > 0) {
remaining.push_back(num);
mp[num]--;
}
}
// 对剩余元素进行排序
sort(remaining.begin(), remaining.end());
// 将排序后的剩余元素追加到结果集中
ans.insert(ans.end(), remaining.begin(), remaining.end());
return ans;
}
};