题目描述
在我们参加的各种竞赛中,允许并列的排名方式是经常遇到的。 例如有四名选手的成绩分别为50、80、50、30分,则80分的选手为第一名,50分的两名选手均为第二名,30分的选手为第四名。 请编写一个程序,计算每个选手在这种排名方式之下的名次(分数高的选手排前面)。
输入
第一行为一个整数 N,表示参赛的选手数,1
输出
一行,表示每位选手的名次。
样例输入
4
50 80 50 30
样例输出
2 1 2 4
解题思路:
本地首先想到的就是采用排序。但稍加分析,发现只是要求每名选手的排名,并没要求将各位选手按序排列,因此可以另辟蹊径,对每一位选手而言,不管有没有并列,他的名次=所以比他成绩高的人数+1,本期可以采用只比较分数高度,而不需要交换,也不需要占用另外的空间,减少了时间和空间复杂度。
参考程序和运行结果
领取专属 10元无门槛券
私享最新 技术干货