给出一个得分列表(例如5,5,4,2,2,0),我希望返回标准比赛排名(1,1,3,4,4,6).
从维基百科的排名页面,这里是SRC的摘要:
标准比赛排名("1224"排名)
在比赛排名中,比较相等的项目接收相同的排名数字,然后在排名数字中留下差距.在此差距中遗漏的排名数量比比较相等的项目数量少一个.同样地,每个项目的排名数字是1加上排在其上方的项目数量.这种排名策略经常被用于比赛,因为这意味着如果两个(或更多)竞争者在排名中占据一席之地,那么排名低于他们的所有人的位置不受影响(即,如果恰好一个人,竞争者只会来到第二位)得分比他们好,第三,如果恰好两个人的得分比他们好,第四个,如果恰好有三个人得分比他们好,等等).
因此,如果A排在B和C之前(比较相等),它们都排在D之前,则A获得排名第1("第一"),B排名第2("联合第二"),C也获得排名数字2("联合秒")和D获得排名第4("第四").在这种情况下,没有人会得到排名第3("第三"),这将留下差距.
任何语言的代码都非常有用.
另外,我有兴趣看到其他排名类型的算法(修改后的竞争排名,密集排名,序数排名和小数排名).
这是怎么做的:
ranking[0]1.i在score-list
score[i]等于score[i-1]他们应该有相同的ranknig:
ranking[i] = ranknig[i-1]ranking[i] = i + 1 + 1由于基于0的基础和基于1的排名)这是Java中的示例实现:
// Set up some sample scores.
int[] scores = { 5, 5, 4, 2, 2, 0 };
// Initialize a ranking array
int[] rankings = new int[scores.length];
// Fill in each position
rankings[0] = 1;
for (int i = 1; i < rankings.length; i++)
rankings[i] = scores[i] == scores[i-1] ? rankings[i-1] : i + 1;
// rankings = [1, 1, 3, 4, 4, 6]
Run Code Online (Sandbox Code Playgroud)