LeetCode:HighFive

模拟题:

#include<bits/stdc++.h>

using namespace std;

void printVec1(vector<int>& v);
void printVec2(vector<vector<int>>& v);

class Solution {
struct Node{
    int id;
    int score[5];
    int cnt;
};
static bool cmp(const Node& a,const Node& b){
    return a.id < b.id;
};
public:
    vector<vector<int>> highFive(vector<vector<int>>& items) {
        Node num[1005];
        int cnt = 1;
        map<int,int> m;
        for(int i=0;i<items.size();i++){
            int a = items[i][0];
            int b = items[i][1];
            if(m[a] == 0){
                m[a] = cnt;
                num[cnt].id = a;
                num[cnt].score[0] = b;
                num[cnt].cnt = 1;
                cnt ++ ;
            }else{
                int c = m[a];
                if(num[c].cnt == 5){
                    if(num[c].score[0] < b){
                        num[c].score[0] = b;
                        sort(num[c].score,num[c].score+5);
                    }
                }else{
                    int& d = num[c].cnt;
                    num[c].score[d] = b;
                    d++;
                    if(d == 5) sort(num[c].score,num[c].score+5);
                }
            }
        }
        sort(num+1,num+cnt,cmp);
        vector<vector<int>> ans;
        for(int i=1;i<cnt;i++){
            vector<int> t;
            t.push_back(num[i].id);
            int s = 0;
            int d = num[i].cnt;
            for(int j=0;j<min(5,d);j++){
                s+=num[i].score[j];
            }
            s/=min(5,d);
            t.push_back(s);
            ans.push_back(t);
        }
        return ans;
    }
};

int main(){
    vector<vector<int>> myin = 
    {{1,91},{1,92},{2,93},{2,97},{1,60},{2,77},{1,65},{1,87},{1,100},{2,100},{2,76}}
    ;
    Solution MyS;
    vector<vector<int>> myout = MyS.highFive(myin);
    printVec2(myout);
    puts("");
    return 0;
}

// 输出一维数组
void printVec1(vector<int>& v){
    printf("{");
    if(v.size()!=0) printf("%d",v[0]);
    for(int i=1;i<v.size();i++){
        printf(",%d",v[i]);
    }
    printf("}");
}

// 输出二维数组
void printVec2(vector<vector<int>>& v){
    printf("{");
    if(v.size()!=0) printVec1(v[0]);
    for(int i=1;i<v.size();i++){
        printf(",");
        printVec1(v[i]);
    }
    printf("}");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值