1122 数组的相对排序

vec_1.insert(vec_1.end(),  vec_2.begin(),  vec_2.end());两个容器的拼接!!

1、我的思路

  • 申请容器vector1
  • 遍历第一个数组,剔除不属于第二个数组的元素,放在容器vector1,然后升序排列
  • 申请辅助空间vector2
  • 遍历第一个数组,然后依次将元素放入辅助空间,再和vector1拼接
  • 自己都觉得浪费空间和时间

2、看别人思路

    计数排序思想

  • 求出第一个数组中最大值,为申请的辅助空间大小做准备!
  • 创建vector,varr,装对应位置变量出现的次数。vector<int> varr(maxnum+1,0);//初始化
  • 删除第一个数组中的所有元素,然后把varr中的变量按照是否出现在第二个数组,装进第一个数组中,然后把变量置零。剩下的都是未出现的元素!!
  • 然后把未出现的数加到第一个数组中,完成排列!

3、代码

 1 //自己的想法
 2 class Solution {
 3 public:
 4     vector<int> relativeSortArray(vector<int>& arr1, vector<int>& arr2) {
 5         //建立一个容器,把不属于第二个数组找出来,然后放入容器中,进行升序排列
 6         vector<int>remove;       
 7         for(int i=0;i<arr1.size();i++){
 8              int cout=0;
 9             for(int j=0;j<arr2.size();j++){
10                 if(arr1[i]==arr2[j]) cout++;
11             }
12             if(cout==0) remove.push_back(arr1[i]);
13         }
14         sort(remove.begin(),remove.end());//把剩下的元素按升序排列 
15         //建立一个容器;计算每一个元素出现的次数 ;新容器中按顺序存放元素
16         vector<int>num;
17         for(int i=0;i<arr2.size();i++){
18             int count=0;
19             for(int j=0;j<arr1.size();j++){
20                 if(arr2[i]==arr1[j]) count++;
21             }
22             for(int k=0;k<count;k++){
23                 num.push_back(arr2[i]);
24             }
25         }
26         //拼接两个容器
27         num.insert(num.end(),remove.begin(),remove.end());
28         return num;
29     }
30 };
 1 //看了一位答主的答案
 2 class Solution {
 3 public:
 4     vector<int> relativeSortArray(vector<int>& arr1, vector<int>& arr2) {
 5         int maxnum=0;
 6         // 步骤1:找出arr1中的最大值
 7         for( int i=0; i<arr1.size(); i++ )
 8         {
 9             if( maxnum < arr1[i] )
10                 maxnum = arr1[i];
11         }
12         // 步骤2:建立arr1中数字和出现次数的vector变量
13         vector<int> varr(maxnum+1,0);
14         for( int i=0; i<arr1.size(); i++ )
15         {
16             varr[arr1[i]]++;
17         }
18         arr1.clear();
19         // 步骤3:添加arr2中元素
20         for( int i=0; i<arr2.size(); i++ )
21         {
22             for( int j=0; j<varr[arr2[i]]; j++ )
23                 arr1.push_back(arr2[i]);
24             varr[arr2[i]] = 0;
25         }
26         // 步骤4:添加arr2中未出现过的元素
27         for( int i=0; i<maxnum+1; i++ )
28         {
29             for( int j=0; j<varr[i]; j++ )
30                 arr1.push_back(i);
31         }
32         return arr1;
33     }
34 };

猜你喜欢

转载自www.cnblogs.com/hehesunshine/p/11668772.html