Puzzle: Find the order of n persons standing in a line (based on their heights)

前端 未结 11 2139
抹茶落季
抹茶落季 2020-12-30 05:58

Saw this question on Careercup.com:

Given heights of n persons standing in a line and a list of numbers corresponding to each person (p) that gives the number of pers

11条回答
  •  隐瞒了意图╮
    2020-12-30 06:32

    I found this kind of problem on SPOJ. I created a binary tree with little variation. When a new height is inserted, if the front is smaller than the root's front then it goes to the left otherwise right.

    Here is the C++ implementation:

    #include
    using namespace std;
    
    struct TreeNode1
    {
        int val;
        int _front;
        TreeNode1* left;
        TreeNode1*right;
    };
    
    TreeNode1* Add(int x, int v)
    {
        TreeNode1* p= (TreeNode1*) malloc(sizeof(TreeNode1));
    
        p->left=NULL;
        p->right=NULL;
        p->val=x;
        p->_front=v;
    
        return p;
    }
    
    TreeNode1* _insert(TreeNode1* root, int x, int _front)
    {
        if(root==NULL) return Add(x,_front);
        if(root->_front >=_front)
        {
                root->left=_insert(root->left,x,_front);
                root->_front+=1;
        }
        else
        {
            root->right=_insert(root->right,x,_front-root->_front);
        }
    
        return root;
    }
    
    bool comp(pair a, pair b)
    {
        return a.first>b.first;
    }
    
    void in_order(TreeNode1 * root, vector&v)
    {
        if(root==NULL) return ;
    
        in_order(root->left,v);
    
        v.push_back(root->val);
    
        in_order(root->right,v);
    
    
    }
    
    vectorsoln(vectorh, vectorin )
    {
        vector >vc;
        for(int i=0;iv;
        in_order(root,v);
        return v;
    }
    
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            int n;
            scanf("%d",&n);
                vectorh;
                vectorin;
    
                for(int i=0;i>x;
                h.push_back(x);}
                for(int i=0;i>x;
                in.push_back(x);}
    
                vectorv=soln(h,in);
                for(int i=0;i

提交回复
热议问题