• 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 };
  • 相关阅读:
    Delphi命名规则
    highcharts 折线,饼状,条状综合图
    Highcharts创建一个简单的柱状图
    创建一个简单的WCF程序
    VS快捷键大全
    2021.05.28 手写简易web服务器
    2021.05.23 春眠不觉晓,optional知多少……
    springboot整合ActiveMQ实现异步交易
    安利一款云容器管理工具portainer……
    uglifyjs压缩js文件(指令压缩/ 批量压缩/ 编程方式压缩)
  • 原文地址:https://www.cnblogs.com/hehesunshine/p/11668772.html
Copyright © 2020-2023  润新知