1217. Relative Sort Array
Difficulty: Easy
Topics: Array, Sort
Similar Questions:
Problem:
Given two arrays arr1
and arr2
, the elements of arr2
are distinct, and all elements in arr2
are also in arr1
.
Sort the elements of arr1
such that the relative ordering of items in arr1
are the same as in arr2
. Elements that don't appear in arr2
should be placed at the end of arr1
in ascending order.
Example 1:
Input: arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6] Output: [2,2,2,1,4,3,3,9,6,7,19]
Constraints:
arr1.length, arr2.length <= 1000
0 <= arr1[i], arr2[i] <= 1000
- Each
arr2[i]
is distinct. - Each
arr2[i]
is inarr1
.
Solutions:
class Solution {
public:
vector<int> relativeSortArray(vector<int>& arr1, vector<int>& arr2) {
unordered_map<int, int> numToIndex;
for (int i = 0; i < arr2.size(); ++i) {
numToIndex[arr2[i]] = i;
}
auto comparator = [&numToIndex](const int& num1, const int& num2) {
if (numToIndex.count(num1) > 0 && numToIndex.count(num2) > 0) {
return numToIndex[num1] < numToIndex[num2];
}
if (numToIndex.count(num1) == 0 && numToIndex.count(num2) == 0) {
return num1 < num2;
}
return numToIndex.count(num1) > 0;
};
sort(arr1.begin(), arr1.end(), comparator);
return arr1;
}
};