在面试一个应聘者之后,我们能够给每人一个分数score。在面试过j个人之后,我们知道这j个人中的最高分,但是不知道后面的n-j个会不会有最高的。
我们决定采取如下策略:
选择一个正整数k<n。面试然后拒绝前k个应聘者,再雇佣其后比前面的应聘者有更高分数的第一个应聘者。
如果最高得分的应聘者在前k个应聘者。我们将雇佣第n个应聘者。
class Assitant:
def __init__(self,a_name="anonymous",value=0):
self.name = a_name
self.score = value
def on_line_maximum(k,assList):
n = len(assList)
bestscore = float("-inf")
for i in range(k):
if assList[i].score > bestscore:
bestscore = assList[i].score
for i in range(k,n):
if assList[i].score > bestscore:
return assList[i]
return assList[n-1]
运行:
>>> assList = [Assitant("dawei",16),Assitant("weimin",18),Assitant("peifang",36),Assitant("sunli",12),Assitant("shaoyun",99),Assitant("yuzheng",78)]
>>> people = on_line_maximum(3,assList)
>>> people.name
'shaoyun'