找出一些成绩较高的学生(面试题)
Posted
技术标签:
【中文标题】找出一些成绩较高的学生(面试题)【英文标题】:Find a number of students whose grades are higher (interview question) 【发布时间】:2021-08-30 09:58:53 【问题描述】:这是面试题:
一个元组代表一个学生,每个科目都有成绩。 (100, 100, 100) 表示学生在所有科目中都获得了 100。
给定一个学生列表,删除所有科目成绩低于所有其他学生的学生。重复直到没有学生被移除。
然后,返回剩余学生的数量。
示例 1
输入:
[(90, 53, 88), (60, 60, 60), (55, 48, 59)]
输出:
2
第一个学生没有被删除,因为
一年级 (90) 高于二年级和三年级学生(分别为 60 和 55)。 三年级 (88) 高于二年级和三年级学生(分别为 60 和 59)。第二个学生没有被删除,因为
一年级(60)高于三年级(55)。 三年级 (60) 高于三年级学生 (59)。第三个学生被删除,因为所有成绩都低于其他所有学生。
示例 2
除了第四个学生(新生)之外,这与第一个示例相同
输入:
[(90, 53, 88), (60, 60, 60), (55, 48, 59), (40, 40, 40)]
输出:
2
第四个学生被删除,因为所有成绩都低于其他所有学生。
现在,其余与“示例1”相同
我不确定如何解决这个问题。有什么想法吗?
【问题讨论】:
这个问题我不清楚。也许你对en.wikipedia.org/wiki/Maxima_of_a_point_set感兴趣 我认为这个问题是面试官故意倒过来的。与其考虑删除你不想要的学生,不如考虑挑选你想要的学生。 问题不清楚:“...在所有科目中都比其他人”?只有一个,不是吗? (或者几个成绩完全相同,不是吗?) 我认为它要求删除所有 "dominated" 条目。但不清楚,因为短语“低于其他在所有科目中。”中的“其他”这个词是模棱两可的,他们的意思是低比任何其他人还是低于所有其他人?不清楚,但我倾向于前者。 如果这是关于战略优势,那么据我所知,它要求的是O(n^2)
的 IESDS 算法。
【参考方案1】:
如果输入是 [98,100,100][100,98,100][99,90,90][1,2,1][2,1,2] 并且答案是 5 你可以简单地做一会儿,如果有一个学生在所有分数的底部并且列表高于1,则去除下摆
[n=num of students]
[M=num of exams]
sort will cost=O(M*nlogn)
remove bottom=O(M*(n-1))~o(M*n)
total run time cost= O(M*nlogn)
如果答案是 2,因为 [98,100,100][100,98,100] 上面有东西, 只需检查每个科目并选择最优秀的学生
如果答案是 3,则 [98,100,100][100,98,100][99,90,90] 在任何科目中都更好: [1,2,1][2,1,2] 我在下面给出的解决方案可以提供帮助,但它更复杂
解决方案:我会尝试对每个考试进行排序, 之后检查每个学生,在当前考试和下一次考试之间,有多少下摆在下摆上方移动, 在学生和那些学生之间创建一条边,创建一个图并添加边,在完成所有考试并将其添加到图中,然后在第一次考试时从第一个学生运行 BFS,每次你找到一个学生,保持哼哼,跑完之后,把BFS找到的学生全部归还,
示例: (A B C D E F 是学生,EX1 EX2 EX3是科目)
EX1:-----EX2:-----EX3:
A:90-----B:60-----C:70
B:60-----C:53-----D:65
C:55-----A:48-----B:60
D:20-----D:30-----A:55
E:10-----F:15-----E:20
F:5------E:10-----F:7
在第一次和第二次考试之间,学生 A 从索引 1 移动到列表中的 3, 所以我在 A 到 B (A,B) 和 A 到 C(A,C) 之间创建了一条边 并将其添加到我的数组中, 与 (E,F) 相同,因为 E 从 5 移动到 6,而 F 现在位于 5 ,
my array :(A,B),(A,C),(E,F)
与 EX2 和 EX3 相同
adding : (B,D)(B,C)(A,B)(F,E)
我的最终数组将是[删除双打后]:
(A,B),(A,C),(E,F),(B,D),(B,C),(F,E)
之后,我将 A 添加到我的结果中并从 A 运行 BFS,我发现每个新的后者,我添加到我的结果中,
the result will be :A,B,C,D
意思是答案是 4
【讨论】:
【参考方案2】:给定学生列表,删除成绩低于 所有其他学生所有科目。重复直到没有学生 被删除。
将每个成绩与成绩、学生对组成一个数组,只要所有成绩数组的最低值来自同一个学生,就删除该学生。
前面的伪代码
for each grade
sort grade
while lowest of all grade is same student
remove student.
【讨论】:
以上是关于找出一些成绩较高的学生(面试题)的主要内容,如果未能解决你的问题,请参考以下文章