亚麻OA2,C++

一二题:Rectangle Overlap, K Closest Points, Window Sum, Longest Palindrome

Rectangle Overlap:

class Node{ double x, y; };

bool checkRecOve(Node topLeftA, Node topLeftB, Node bottomRightA, Node bottomRightB){

    if( topLeftA.x <= bottomRightB.x || topLeftB.x <= bottomRightA.x) return true;

    if( topLeftA.y <=bottomRightB.y || topLeftB.y <= bottomRightA.y ) return true;

    return false;

}

K Closest Points:

// find the k closest points from (0,0)

struct cmp{  bool operator()(Point& x, Point& y){ return x.a*x.a+x.b*x.b<y.a*y.a+y.b*y.b; }  };

vectorkcp2(std::vector& input, int k){

int size=input.size();

if(k>=size) return input;

priority_queue<Point, vector<Point>, cmp> q;

for(int i=0;i<size;i++){

    q.push(input[i]);

    if(q.size()>k) q.pop();

}

vector<Point> res(k,Point(0,0));

for(int i=k-1;i>=0;i--){

    res[i]=q.top();

    q.pop();

}

return res;

Window Sum:

vector<int> windowsum(vector<int>& input, int k){

    vector<int> res;  // if size<1 || size<k return res;

    int size=input.size(), sum=0;

    for(int i=0;i<k;i++) sum+=input[i];

    res.push_back(sum);

    for(int i=k;i<size;i++){

        sum=sum+v[i]-v[i-k];

        res.push_back(sum);

    }

    return res;

}

Longest Palindrome:

string LP(string& s){

    int size=s.size(), nsize=2*size+3, dp[nsize], C=0, R=0; // if size<2 return s;

    string test="^$";

    for(int i=0;i<size;i++) test+=s[i], test+='#';

    test+='$';

    memset(dp, 0, nsize);

    for(int i=1;i<nsize-1;i++){

        if(R>i) dp[i]=min(dp[2*C-i], R-i);

        while(test[i+dp[i]+1]==test[i-dp[i]-1]) dp[i]++;

        if(i+dp[i]>R) R=i+dp[i], C=i;

    }

    for(int i=1;i<nsize-1;i++) if(R<dp[i]) R=dp[i], C=i;

    return s.substr((C-1-R)/2, R);

}

第三题:Copy List with Random Pointer, Order Dependency, Minimum Spanning Tree, Five Scores, Maximum Subtree

Copy List with Random Pointer:

RandomListNode *copyRandomList(RandomListNode *head) {

    RandomListNode *temp, *cur=head, *res;

    while(cur){

        temp=new RandomListNode(cur->label);

        temp->next=cur->next;

        cur->next=temp;

         cur=temp->next;

    }

    cur=head;

    while(cur){
        if(cur->random) cur->next->random=cur->random->next;

        cur=cur->next->next;

    }

    cur=head;

    temp=res=head?head->next:head;

    while(cur){

        cur->next=temp->next;

        cur=cur->next;

        if(cur)temp->next=cur->next;

        temp=temp->next;

    }

    return res;

}

Order Dependency:

vector<Order> getOrder(vector<OrderDep>& input){

    map<string, int> indegree;

    map<string, vector<string> > leadto;

    int size=input.size();

    for(int i=0;i<size;i++){

        leadto[input[i].pre.name].push_back(input[i].cur.name);

        indegree[input[i].cur.name]++; indegree[input[i].pre.name]+=0;

    }

    queue<string> q;

    map<string, int>::const_iterator ptr=indegree.begin();

   while(ptr!=indegree.end()){

       if(ptr->second==0) q.push(ptr->first);

        ptr++;

    }

    vector<Order> res;

    while(q.size()){

         string temp=q.front(); q.pop();

        res.push_back(Order(temp));

        for(int i=0;i<leadto[temp].size();i++)  if(--indegree[leadto[temp][i]==0) q.push(leadto[temp][i]);

    }

    if(res.size() == indegree.size()) return res;

    vector<Order> emp; return emp;

Minimum Spanning Tree: 

struct cmp{ bool operator()(const Conn& a, const Conn& b){ return a.cost<b.cost; } };

struct cmp2{ bool operator()(const Conn& a, const Conn& b){ if(a.node1!=b.node1) return a.node1<b.node1; return a.node2<b.node2; } };

vector<Conn> findMST(vector<Conn>& v){

    vector<Conn> res; //if v empty return res;

    sort(v.begin(), v.end(), cmp() ); // sort by cost;

    map<string, int> group; // group nume

    int size=v.size(), groupnum=0;

    for(int i=0;i<size;i++){

        if( !group.count(v[i].node1) && !group.count(v[i].node2 ){ group[v[i].node1]=group[v[i].node2]=++groupnum; res.push_back(v[i]);  } // two new node

        else if( ! && ) {group[v[i].node1] = group[v[i].node2]; res.push_back(v[i]); }    // one new node

        else if( && !) {group[v[i].node2] = group[v[i].node1]; res.push_back(v[i]); }     // one new node

        else {

            int u1=group[v[i].node1], u2=group[v[i].node2];

            if(u1!=u2) change all node in group u2 to u1, if u2>u1. Otherwise change u1 to u2;

        }

        check if there are more than one group. If so, return empty vector, otherwise return res;

    } 

Five Scores:

map<int, double> getHF(vector<Result>& input){

    map<int, double> res;

    map<int, priority_queue<int> > record;

    for( int i=0;i<input.size(); i++) record[input[i].id].push(input[i].value);

    map<int, priority_queue<int> >::iterator ptr=record.begin();

    while(ptr!=record.end()){

        double sum=0;

        for(int i=0;i<5;i++) sum+=ptr->second.top(), ptr->second.pop();

        res[ptr->first]=sum/5;

        ptr++;

    }

    return res;

}

Maximum Subtree:

Node* cTree(Node* root){

    if(root==NULL) return root;

    Node* res=NULL; double maxv=-1;

    find(root, res, maxv);

    return res;

}  // subsum, subcnt

pair<int,int> find(Node* root, Node* &res, double& maxv){ 

    if(root->children.empty()) return pair<int,int>(root->val, 1);

    int curSum=root->val, curCnt=1;

    for(int i=0;i<root->children.size();i++){

        pair<int,int> temp=find(root->children[i], res, maxv);

        curSum+=temp.first; curCnt+=temp.second;

    }

    double curv=(double)curSum/curCnt;

    if(curv>maxv) maxv=curv. res=root;

    return pair<int,int>(curSum, curCnt);

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容