思路:
- 用一个数组来模拟哈希表,遍历
arr1
,记录其中每个数字出现的次数; - 因为
arr2
中的数字在arr1
中全都出现过,所以在遍历arr2
的同时,将哈希表中出现的数字覆盖到arr1
上; - 最后
arr1
中只剩下arr2
中未出现过的数字,按题目要求将剩余元素按升序放置到arr1
末尾。
class Solution {
public:
vector<int> relativeSortArray(vector<int>& arr1, vector<int>& arr2) {
vector<int> map(1001, 0);
int idx = 0;
for (int& num : arr1) map[num] ++ ; // 1.
for (int& num : arr2)
{
while (map[num] > 0) // 2.
{
arr1[idx ++ ] = num;
map[num] -- ;
}
}
for (int i = 0; i < map.size(); ++ i) // 3.
{
while (map[i] > 0)
{
arr1[idx ++ ] = i;
map[i] -- ;
}
}
return arr1;
}
};