链接
解法
遍历arr1,如果map中没有某元素,则将其put进去并设置值为从,否则将值加一,然后遍历arr2,按相对顺序将元素去除并放入预先准备好的数组arr3,然后将对应元素的值减一,直到减到0,然后将arr1排序,并将剩余元素放入arr3
代码
class Solution {
public int[] relativeSortArray(int[] arr1, int[] arr2)
{
//arr2 中元素各不相同
//arr1 中有arr2 中的每个元素
int[] arr3 = new int[arr1.length];
Map<Integer, Integer> map = new HashMap<>();
for (int num : arr1)
{
if (map.containsKey(num))
{
map.put(num, map.get(num) + 1);
} else
{
map.put(num, 1);
}
}
int j = 0;
for (int num : arr2)
{
while (map.get(num) != 0)
{
arr3[j++] = num;
map.put(num, map.get(num) - 1);
}
}
Arrays.sort(arr1);
for (int num : arr1)
{
while (map.get(num) != 0)
{
arr3[j++] = num;
map.put(num, map.get(num) - 1);
}
}
return arr3;
}
}
大佬
public int[] relativeSortArray(int[] arr1, int[] arr2) {
int[] nums = new int[1001];
int[] res = new int[arr1.length];
//遍历arr1,统计每个元素的数量
for (int i : arr1) {
nums[i]++;
}
//遍历arr2,处理arr2中出现的元素
int index = 0;
for (int i : arr2) {
while (nums[i]>0){
res[index++] = i;
nums[i]--;
}
}
//遍历nums,处理剩下arr2中未出现的元素
for (int i = 0; i < nums.length; i++) {
while (nums[i]>0){
res[index++] = i;
nums[i]--;
}
}
return res;
}