【算法分析】
首先想到使用sort进行每一轮排序,而sort是二分的思想,时间复杂度为 O(nlog2n)O(nlog_2n)O(nlog2 n),在此次题中,每次需要更新的值都是相邻两个人变化后的分数,而相邻两个人的分数有时是不会改变位置的,sort则是每次全部修改,造成了浪费。
然后考虑归并,归并的思想是合并两个同序数组的线性方式,每次比较两个有序数组的值,谁更小则放到tmp数组里,指针加1,归并排序每次的操作只针对相邻区间,或者说合并时是对相邻几个区间的操作,所以这符合只需要修改相邻几个分数的排布状况的题意。即使和快排的复杂度相同,但是省掉了冗杂无用的操作,是一个极大的改良。
【参考代码】
【时间复杂度】
O(rn)O(rn)O(rn)
【预计得分】
100pts100pts100pts