leetcode1366. 通过投票对团队排名

这篇博客介绍了一个特殊的团队排名系统,根据投票者的顺序进行排名。首先,团队的排名由获得最多第一票的团队决定,如果相同则看第二票的数量,以此类推。若所有票数都相同,则按团队名称字母顺序排列。为了解决LeetCode1366题目,作者利用哈希表存储团队及其票数,并用向量排序来实现排名算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 https://leetcode-cn.com/problems/rank-teams-by-votes/

题意:

现在有一个特殊的排名系统,依据参赛团队在投票人心中的次序进行排名,每个投票者都需要按从高到低的顺序对参与排名的所有团队进行排位。

排名规则如下:

参赛团队的排名次序依照其所获「排位第一」的票的多少决定。如果存在多个团队并列的情况,将继续考虑其「排位第二」的票的数量。以此类推,直到不再存在并列的情况。
如果在考虑完所有投票情况后仍然出现并列现象,则根据团队字母的字母顺序进行排名。
给你一个字符串数组 votes 代表全体投票者给出的排位情况,请你根据上述排名规则对所有参赛团队进行排名。

请你返回能表示按排名系统 排序后 的所有团队排名的字符串。

 方法:利用向量的排序,利用哈希表来存储所有的候选者名字,利用数组来存储一开始的候选者票数以及对应位置的关系

bool cmp(vector<int> &a,vector<int> &b)
{
    int index = 1,len=a.size();//从1开始,因为0存的是这个字符距离A的距离
    while(a[index]==b[index])
    {   
        index++;
        if(index==len) break;
    }
    if(index==len) return a[0]<b[0];//如果很不幸,两者旗鼓相当,返回字典序靠前的
    return a[index]>b[index];//否则按规矩来,谁的票多,票的优先级高就返回
}
class Solution {
public:
    string rankTeam
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值