标签:fir http cond while 答案 count empty push second
给你两个数组,arr1 和?arr2,
对 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]
说明:
题目链接: https://leetcode-cn.com/problems/relative-sort-array/
使用哈希表map<int, int> hash
统计 arr1 中每个元素的个数,这里要用 map,不能用 unordered_map,因为 map 默认是按照 key 升序来排列的,我们可以利用这个性质将 arr1 中未出现在 arr2 中的元素按照升序放在?arr1?的末尾。步骤如下:
代码如下:
class Solution {
public:
vector<int> relativeSortArray(vector<int>& arr1, vector<int>& arr2) {
map<int, int> hash;
for(int i=0; i<arr1.size(); i++){
hash[arr1[i]]++;
}
int n = arr1.size();
vector<int> ans;
for(int i=0; i<arr2.size(); i++){
while(hash[arr2[i]]>0){
ans.push_back(arr2[i]);
hash[arr2[i]]--;
}
if(hash.count(arr2[i])==0) hash.erase(arr2[i]);
}
if(!hash.empty()){
for(auto it=hash.begin(); it!=hash.end(); it++){
while(it->second>0){
ans.push_back(it->first);
it->second--;
}
}
}
return ans;
}
};
标签:fir http cond while 答案 count empty push second
原文地址:https://www.cnblogs.com/flix/p/13289648.html