zoukankan      html  css  js  c++  java
  • 数组还原问题

    问题描述:

    给一个array比如[4,2,1,3,5],根据这个array现在我们能有了一个新的array => 每个数是在原array里, 在它左边的所有比它大的number的个数,就是[0,1,2,1,0]. 题目是现在给了这个[0,1,2,1,0]要求原array, 原来array的range是1~n,

    思路描述:

    首先,初始化一个动态数组vector,使其值为:1-n

    然后,从给定数组的最后一个开始,依次确定每一个位置上的数字,并将其值从动态数组中删除.

    举例:

    初始化数组:orderNumber{1,2,3,4,5};给定数组:data{0,1,2,1,0};求原数组res,res初始化为res{0,0,0,0,0}。

    1. data[5-1]=0,说明前面没有比其大的数字,则res[5-1]=5.擦除掉orderNumber中已经确定的数字,此时orderNumber数组为orderNumber={1,2,3,4}

    2. data[5-2]=1,说明前面有1个比其大的数字,则在剩余数字orderNumber中,有1个比其大的数字为3,则res[5-2]=3,此时,orderNumber={1,2,4}

    3. data[5-3]=2,说明前面有2个比其大的数字,则在剩余数字orderNumber中,有2个比其大的数字为1,则res[5-2]=1,此时,orderNumber={1,2,4}

    ...

    依次,可以得到每一个位置上的数字:res = {4,2,1,3,5}

    代码:

    #define ArrarRightGreater
    #ifdef ArrarRightGreater
    
    
    #include <iostream>
    #include <vector>
    using namespace std;
    int main(int argc, char* argv[])
    {
        
        vector<int> data;
        char tempc;
        while ((tempc = cin.get()) != '
    ')
        {
            if (tempc != ' ')
            {
                data.push_back(tempc - '0');
            }
        }
        
    
        //6 2 7 5 8 11 13 1 4 10 3 12 9
        //vector<int> data{0,1,0,2,0,0,0,7,6,2,8,1,4};
        int nsize = data.size();
        vector<int> orderNumber(nsize, 0);
        for (int i = 0; i < nsize; ++i)
        {
            orderNumber[i] = i+1;
        }
        
        vector<int> res(nsize, 0);
        for (int i = nsize - 1; i >= 0; --i)
        {
            res[i] = orderNumber[orderNumber.size() - 1 - data[i]];
            orderNumber.erase(orderNumber.end() - 1 - data[i]);
        }
    
        for (int i = 0; i < nsize; ++i)
        {
            cout << res[i]<<"  ";
        }
        cout << endl;
    
        system("pause");
        return 0;
    }
    
    
    
    
    #endif/*ArrarRightGreater*/

    测试:

     

  • 相关阅读:
    填充与复制
    张量排序
    数据统计
    合并与分割
    前向传播(张量)- 实战
    数学运算
    Broadcasting
    TensorFlow2-维度变换
    集合3
    集合2
  • 原文地址:https://www.cnblogs.com/jingjingblog/p/9569822.html
Copyright © 2011-2022 走看看