难度简单154收藏分享切换为英文接收动态反馈
给你两个数组,arr1
和 arr2
,
arr2
中的元素各不相同arr2
中的每个元素都出现在arr1
中
对 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]
提示:
1 <= arr1.length, arr2.length <= 1000
0 <= arr1[i], arr2[i] <= 1000
arr2
中的元素arr2[i]
各不相同arr2
中的每个元素arr2[i]
都出现在arr1
中
通过次数53,571提交次数75,535
解答:先遍历分成包含在arr2中的,和不在里面的,对于不在里面的进行排序;对于在里面,重新遍历一次。
class Solution {
public:
vector<int> relativeSortArray(vector<int>& arr1, vector<int>& arr2) {
vector<int> inarr2;
vector<int> notinarr2;
vector<int> reti;
for(int i=0;i<arr1.size();i++)
{
vector<int>::iterator it = find(arr2.begin(),arr2.end(),arr1[i]);
if(it != arr2.end())
inarr2.push_back(arr1[i]);
else
notinarr2.push_back(arr1[i]);
}
sort(notinarr2.begin(),notinarr2.end());
for(int i=0;i<arr2.size();i++)
{
for(int j=0;j<inarr2.size();j++)
{
if(inarr2[j]==arr2[i])
{
reti.push_back(arr2[i]);
}
}
}
for(int i=0;i<notinarr2.size();i++)
{
reti.push_back(notinarr2[i]);
}
return reti;
}
};
执行结果:
通过
显示详情
执行用时:4 ms, 在所有 C++ 提交中击败了90.33%的用户
内存消耗:7.5 MB, 在所有 C++ 提交中击败了99.11%的用户