【发布时间】:2019-07-18 04:43:55
【问题描述】:
我在编码比赛中遇到了以下问题。我尝试了很多,但一个私人测试用例总是以错误的答案对我来说失败,我无法弄清楚为什么我的下面的方法会失败。我没有天真的解决方案来生成压力测试用例并进行比较。此外,不会发表社论。 所以,如果可能的话,我正在寻找有人指出我方法中的缺陷。
以下是对问题的详细描述以及我到目前为止所做的尝试。
问题: 有多个地区,根据学生在各自地区的排名,您将获得每个地区的学生分数。 例如:
Region1:
StudentName, Score
A, 50.0
B, 60.0
C, 40.0
Region2:
StudentName, Score
D, 30.0
E, 10.0
F, 20.0
在上面的数据中,学生A在Region1中排名第1,B在Region1中排名第2,C在Region1中排名第3。 同理,D在Region2中有Rank1,E有Rank2,F有Rank3。
- 学生在同一区域内的分数可能较低,但仍具有较高的排名。例如,A 在 Region1 中的排名优于 B,即我们应该假设每个区域的数据已经按照排名进行了排序。
我们的任务是合并所有区域的数据并创建一个根据分数排名的全局数据。约束条件是,任何在该地区排名较低的学生仍然不能高于该地区其他学生的排名,这些学生在原始地区数据中的排名高于它。
例如:
Region1:
A, 50.0
B, 60.0
C, 40.0
Region2:
D, 30.0
E, 10.0
F, 20.0
将被合并到:
A, 50.0
B, 60.0
C, 40.0
D, 30.0
E, 10.0
F, 20.0
顺序没有根据分数改变,因为 B 将始终低于 A,F 将始终低于 E,根据其区域的限制。
其他测试用例:
Region1:
A, 50.0
B, 60.0
C, 70.0
Region2:
D, 30.0
E, 20.0
F, 10.0
再次按照 A,B,C,D,E,F 的顺序产生结果
Region1:
A, 60.0
B, 80.0
C, 100.0
Region2:
D, 70.0
E, 90.0
F, 110.0
将导致: D、E、F、A、B、C
但是,
Region1:
A, 11.5
B, 8.5
C, 10.0
Region2:
D, 12.0
E, 9.0
F, 9.5
将导致:
D, 12.0
A, 11.5
E, 9.0
B, 8.5
C, 10.0
F, 9.5
Constraints:
1<=number of regions<=6
score can be upto 7 decimal places
我的方法是将所有输入数据添加到一个列表中并保持稳定的排序,即如果两个学生的区域相同,则比较他们在区域中的排名,否则比较分数。
static class Student implements Comparable<Student>
{
String name;
double score;
int zone;
int rank;
//constructor
public int compareTo(Student o)
{
if(this.zone == o.zone)
{
//lower i.e. better rank
return Integer.compare(this.rank, o.rank);
}
//higher i.e. better score
return Double.compare(o.score, this.score);
}
}
main()
{
//read data from console input into an ArrayList<Student> students
Collections.sort(students);
//print each student from students
}
问题没有提到两个学生在不同区域的分数是否相等。在这种情况下,我尝试使用他们各自在区域中的排名来打破平局,但私人测试用例一直失败。我最初认为该问题可能缺少一些信息,但我在竞赛仪表板中看到许多成功提交此问题的信息。这就是我相信我遗漏了一些东西的原因,这个问题并不像我想的那么简单。但是,我无法提出一个测试用例来验证这个假设。
谢谢!
【问题讨论】:
-
抱歉,没有公开链接
-
@ruakh 这个问题是有道理的,但令人困惑;在我理解它之前,我必须阅读它几次。但是,我不清楚的是,在区域内强加部分排序是否会导致合并列表的唯一结果。换句话说,这里描述的约束可能不会强加一个总排序。
-
我提供了如此详细的问题描述、测试用例、我的方法和所有其他内容,但仍然被否决:( 没有什么能帮助你摆脱悲观情绪有时
-
@StuartMarks 评论中的“独特结果”是什么意思?
-
@Stacky 这就是我的意思。在我给出的例子中,A > B, B > C, C > A。你的排序关系不是传递的,这意味着你不能用它来排序。
标签: java algorithm sorting merge comparator